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

问题描述 投票:1回答:1

我试图在APEX(19.2)上实现一个页面,用户必须在该页面上输入列名。此输入应将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-语句:

 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项目。

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

sql oracle report oracle-apex
1个回答
1
投票

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

 select * FROM UEBERSICHT where
 DECODE(:P904_COLUMN,'A',A,'B',B) = :P904_AUSDRUCK;
© www.soinside.com 2019 - 2024. All rights reserved.