【发布时间】:2020-11-24 09:42:24
【问题描述】:
我之前有类似的要求,但现在我得到了一个需要实施的明确方法。
我需要编写一个过程(最好)/函数,它会根据作为参数传递的 app_id,更改在动态视图中旋转的相应值的列标题。
具有列标题的表是 DATA_HEADER。
值为 DATA_VALUE 的表。
列标题和值需要按顺序旋转。
两个表都有共同的 app_id。因此对于 app_id=1,来自 DATA_HEADER 的标签将用于 DATA_VALUE 中的值。但是,这些值仅根据 PID 变化,因此它们将保持不变,只有标头会根据应用 ID 变化。
当 app_id 在 proc/funct 中传递时,预期的视图应该是:
所以基本上,每个 app_id 的标题都会发生变化,列标题的最大数量为 20。因此数字或名称应与表 DATA_HEADER 中的不同。 这些值是根据 pid 唯一标识的。
列标题的顺序将按照 DATA_HEADER 中的 seq 列。 同样,值的顺序将按照数据值中的 seq 列进行,因此必须遵循该顺序并相应地进行旋转。
附:最后的应用程序是调用 proc/function 的 Oracle apex。
Oracle 版本:12.1
【问题讨论】:
-
您是否为生成的代码应该是什么样子或如何编译生成的代码而苦恼?到目前为止,您尝试过什么?
-
我尝试过使用动态 sql、pivot xml 进行数据透视,但这些都不能帮助格式化数据。即动态更改列标题,没有解决方案有效,因此建议我尝试这种方法。我可以编写一个程序,但我无法理解如何通过 proc 创建动态视图,并在 proc 内更改标题。
-
您可以将所有代码附加到 VARCHAR2 或 CLOB,然后使用
EXECUTE IMMEDIATE对其进行编译。 (例如:BEGIN EXECUTE IMMEDIATE 'CREATE VIEW v AS SELECT dummy FROM dual'; END;)