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

Plsql 有没有办法在Oracle apex中显示动态列,plsql,oracle11g,oracle-apex-5.1,Plsql,Oracle11g,Oracle Apex 5.1,长话短说,我不能使用pivot来完成这项任务,因为我需要在列中包含很长的元素。尽管我试图在Oracle Apex中创建一个基于函数的经典报告。查询已正确生成,但在经典报告中不起作用。首先给出一个一般提示:使用dbms\u输出将变量l\u sql输出到控制台。放入行或使用某种调试表,您可以将其插入其中。还要注意该变量的数据类型。如果需要扩展SQL,可以使用CLOB变量而不是varchar2 如果您想对问题进行全面分析,您需要提供表结构和测试数据,因此我首先给您一些一般性的解释: 如果有永久的、不

长话短说,我不能使用pivot来完成这项任务,因为我需要在列中包含很长的元素。尽管我试图在Oracle Apex中创建一个基于函数的经典报告。查询已正确生成,但在经典报告中不起作用。

首先给出一个一般提示:使用
dbms\u输出将变量
l\u sql
输出到控制台。放入行
或使用某种调试表,您可以将其插入其中。还要注意该变量的数据类型。如果需要扩展SQL,可以使用
CLOB
变量而不是
varchar2

如果您想对问题进行全面分析,您需要提供表结构和测试数据,因此我首先给您一些一般性的解释:

如果有永久的、不可更改的列数,则可以使用通用列名。但是,如果列的顺序甚至数量可以更改,那么这是一个坏主意,因为如果查询结果的列数超过
通用列数,则页面将显示错误

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

增强返回SQL查询的
PL/SQL函数体,使其输出详细的显示名称,如下所示:

return 'select 1 as "Your verbose column name", 2 as "Column #2", 3 as "Column #3" from dual';
看起来是这样的:

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

它的缺点是列名也以这种方式出现在设计器中,并且只有在重新验证函数时,APEX才会更新这些列名。您将很难在流程代码或动态操作中引用内部名称为
详细列名的列

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

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

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

这里还可以提供一个返回列名的函数。请注意,此函数不应返回本身返回列名的SQL查询,而是返回由“冒号“分隔的列名

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

选项3:两者

关闭通用列名,让查询返回易于识别和引用的列名,并使用
自定义列标题
函数为用户返回详细的名称

我的个人意见


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

一般提示:首先,使用
dbms\u输出将变量
l\u sql
输出到控制台。在控制台中插入行
或使用某种调试表。还要注意该变量的数据类型。如果需要扩展SQL,可以使用
CLOB
变量而不是
varchar2

如果您想对问题进行全面分析,您需要提供表结构和测试数据,因此我首先给您一些一般性的解释:

如果有永久的、不可更改的列数,则可以使用通用列名。但是,如果列的顺序甚至数量可以更改,那么这是一个坏主意,因为如果查询结果的列数超过
通用列数,则页面将显示错误

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

增强返回SQL查询的
PL/SQL函数体,使其输出详细的显示名称,如下所示:

return 'select 1 as "Your verbose column name", 2 as "Column #2", 3 as "Column #3" from dual';
看起来是这样的:

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

它的缺点是列名也以这种方式出现在设计器中,并且只有在重新验证函数时,APEX才会更新这些列名。您将很难在流程代码或动态操作中引用内部名称为
详细列名的列

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

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

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

这里还可以提供一个返回列名的函数。请注意,此函数不应返回本身返回列名的SQL查询,而是返回由“冒号“分隔的列名

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

选项3:两者

关闭通用列名,让查询返回易于识别和引用的列名,并使用
自定义列标题
函数为用户返回详细的名称

我的个人意见


我在生产应用程序中使用第三个选项,人们可以在报告页面上使用穿梭项更改列的数量和顺序。这花了一些时间,但现在它像一个符咒一样工作,就像一些动态的
PIVOT
而没有
PIVOT

如果通用列设置为“是”
--