如何根据 APEX 交互式网格查询中的替换字符串获取列值?

How to get the column value based on the substitution string in APEX Interactive grid query?

我必须在 APEX Interactive 网格的某些列中传递动态隐藏项值。

to_char(&P1_ITEM)

P1_ITEM -> YR_2020(YR_2020是table中的列名,列值=1000)

如果我在查询中传递 :P1_ITEM,我将在报告中获取项目字符串。如何获取列值(1000)而不是项目字符串(YR_2020)?

CASE WHEN P1_ITEM = 'YR_2021' 然后 YR_2021

其他 &P1_ITEM

我的其他部分正在返回项目字符串。

谢谢

此行为是预期的。无法在 pl/sql 中使用绑定变量来定义您的列名。绑定变量被解释为它具有的值而不是列名。

对于下面的例子,来源

SELECT :P45_SELECTED_COL FROM emp

执行的select将是:

SELECT 'ENAME' FROM emp;

而不是你想要的:

SELECT ENAME FROM emp;

apex 中的解决方法是使用类型“函数 Body 返回 SQL 查询”并在 运行 之前动态生成查询。 下面是 emp/dept 示例数据集的示例。

请注意,顶点引擎需要能够在编译时解析查询,否则会出错,因此您必须提供默认值(因此第 2 行的 NVL)。

下面是对 emp table 的查询示例,其中第一列是通过页面项目确定的。

DECLARE
  l_selected_col VARCHAR2(100) := NVL(:P45_SELECTED_COL,'ENAME');
  l_statement VARCHAR2(4000):= 
  q'!
select ##SELECTED_COL## AS COL1,
       JOB,
       MGR,
       HIREDATE,
       SAL,
       COMM,
       DEPTNO
  from EMP!';
BEGIN
  RETURN REPLACE(l_statement,'##SELECTED_COL##',l_selected_col);
END;

要将报告中的列 header 调整为 selected 列,请将列标题属性设置为 &P45_SELECTED_COL.