有没有办法在 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
长话短说,由于我需要在列中包含很长的元素,因此我无法使用 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