SQL上的动态列不起作用(APEX,交互式报告)

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

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-Statement中:

 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:解析返回的查询结果为” ORA-20999:未能解析SQL查询!

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

我怎么解决这个问题 ?

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

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

评论
  • rtotam
    rtotam 回复

    IF all the columns in :P904_COLUMN is of same data type you can use something like below where A and B are column names

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