有没有办法在 Oracle apex 中显示动态列

Is there a way to display dynamic columns in Oracle apex

长话短说,由于我需要在列中包含很长的元素,因此我无法使用 pivot 来完成此任务。尽管我尝试在 Oracle Apex 中创建基于函数的经典报表。查询已正确生成,但在经典报表中不起作用。

首先是一般性提示:使用 dbms_output.put_line 将变量 l_sql 输出到您的控制台,或者使用某种调试 table 可以将其插入的地方。还要注意该变量的数据类型。如果您需要扩展 SQL,您可以达到需要使用 CLOB 变量而不是 varchar2.

的程度

如果你想完整地分析你的问题,你需要提供table结构和测试数据,所以我首先给你一些一般性的解释:

Use Generic Column Names 如果您有永久不变的列数,则可以。但是,如果您的列的顺序甚至数量可以更改,那么这是一个坏主意,因为如果您的查询结果中的列数超过 Generic Column Count

,您的页面将显示错误

选项 1:在查询中使用列别名

以输出详细显示名称的方式增强您的 PL/SQL Function Body returning SQL Query,如下所示:

return 'select 1 as "Your verbose column name", 2 as "Column #2", 3 as "Column #3" from dual';

看起来像这样:

它的缺点是列名也以这种方式出现在设计器中,如果您 re-validate 函数,APEX 只会更新这些列名。您将很难在流程代码或动态操作中引用内部名称为 Your verbose column name 的列。

但是它仍然有效,即使您在不告知 APEX 的情况下更改列名,例如通过将 PL/SQL Function Body 外部化为实际函数。

选项 2:使用自定义列标题

有点隐藏,但也有完全自定义列标题的选项。它几乎位于您报告区域的 属性 页面的末尾。

在这里您还可以提供一个函数来 return 您的列名。请注意,此函数不应该 return 一个 SQL 查询本身 returns 列名,而是 return 由 冒号分隔的列名.

使用此方法,可以更轻松地在设计器中识别和引用您的列:

选项 3:两者都有

关闭 Generic Column Names,让您的查询 return 列名称易于识别和引用,并使用 custom column headings 功能 return 用户的详细名称。

个人看法

我在生产应用程序中使用第三个选项,人们可以使用报表页面上的穿梭项自行更改列的数量和顺序。这花了一些时间,但现在它就像一个魅力,就像一些没有 PIVOT.

的动态 PIVOT