【问题标题】:Is there a way to display dynamic columns in Oracle apex有没有办法在 Oracle apex 中显示动态列
【发布时间】:2019-09-12 07:44:13
【问题描述】:

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

【问题讨论】:

  • If Generic Columns is set yo 'Yes'-- 不明白你想用这个语句表达什么?你能详细说明一下吗
  • @XING ,是的,我已经编辑过了。 apex 中的通用列选项使我的表列名称类似于“col1、col2、col3、...、col60”,并且使用这种格式,我不知道每列代表什么。在生成的查询中,每个动态列都有一个别名。

标签: plsql oracle11g oracle-apex-5.1


【解决方案1】:

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

如果你想彻底分析你的问题,你需要提供表结构和测试数据,因此我首先给你一些一般性的解释:

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';

看起来像这样:

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

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

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

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

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

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

选项 3:两者兼而有之

关闭通用列名,让您的查询返回易于识别和引用的列名,并使用custom column headings 函数为您的用户返回详细名称。

我的个人意见

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

【讨论】:

  • 嗨,我有类似的问题,有一个数据表。另一个表 data_header 包含基于 app_id 的列名。因此,如果 app_id 为 1,则列标题将替换数据表中的列标题。这是给IG的。你建议什么方法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-01
  • 1970-01-01
  • 2021-10-17
相关资源
最近更新 更多