【问题标题】:Dynamic Column on SQL doesn't work (APEX,Interactive Report)SQL 上的动态列不起作用(APEX,交互式报告)
【发布时间】:2020-04-24 11:54:34
【问题描述】:

我尝试在 APEX(19.2) 上实现一个页面,用户必须在其中进行输入,即列名。此输入应限制 where 子句上的 select 语句,如下所示:

select * FROM UEBERSICHT where
:P904_COLUMN = :P904_AUSDRUCK;

:P904_COLUMN 和 :P904_AUSDRUCK;都是 APEX 项,是用户输入所需要的。

当我写列名而不是:P904_COLUMN 时,我得到一个输出,否则没有。 但正如标题所说,我想实现一个动态列。

我也尝试过使用 PL/SQL ,它返回如下 SQL 语句:

declare
statement varchar2(4000);

begin


statement:= 'SELECT * FROM UEBERSICHT where
 :P904_COLUMN = :P904_AUSDRUCK;';

return statement;
end;

另一种方法是,先将输入保存在变量上,然后将变量名写入 SQL - 语句:

 declare
statement varchar2(4000);
spalte varchar2(50);
begin

if :P904_COLUMN = '"Gesellschaft"' then spalte := '"Gesellschaft"'; end if;    
statement:= 'SELECT * FROM UEBERSICHT where
 '||spalte||' = :P904_AUSDRUCK;';

return statement;
end;

这里我得到这个语法错误,它不应该正常出现:“ORA-20999: Parsing returned query results in "ORA-20999: Failed to parse SQL query!

ORA-06550:第 5 行,第 6 列:ORA-00936:缺少表达式

“。”

我该如何解决这个问题?

PS:是的,我正在提交所有 APEX 项目。

更新:调试显示我得到了输入,但交互式报告没有给我任何输出。

【问题讨论】:

    标签: sql oracle report oracle-apex


    【解决方案1】:

    如果:P904_COLUMN 中的所有列都属于same data type,您可以使用类似下面的内容,其中AB 是列名

     select * FROM UEBERSICHT where
     DECODE(:P904_COLUMN,'A',A,'B',B) = :P904_AUSDRUCK;
    

    【讨论】:

    • 感谢您的回答!一个好主意,但它并没有帮助。将返回的值将被采用,但没有输出。
    • 你能解释一下吗
    • 再次感谢您,它成功了!我的问题是 :P904_COLUMN 实际上是一个选择列表,我使用双引号作为返回值,当我删除它们时,它适用于你的方法。非常感谢!
    猜你喜欢
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 2020-12-06
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多