我试图在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项目。
更新:调试显示我得到了输入,但是交互式报表却没有任何输出。
如果:P904_COLUMN
中的所有列都是same data type
,则可以使用下面的类似内容,其中A
和B
是列名
select * FROM UEBERSICHT where
DECODE(:P904_COLUMN,'A',A,'B',B) = :P904_AUSDRUCK;