SQL上的动态列不';t工作(APEX,交互式报告)
我尝试在APEX(19.2)上实现一个页面,用户必须在其中输入一个列名。该输入应限制where子句上的select语句,如下所示:SQL上的动态列不';t工作(APEX,交互式报告),sql,oracle,report,oracle-apex,Sql,Oracle,Report,Oracle Apex,我尝试在APEX(19.2)上实现一个页面,用户必须在其中输入一个列名。该输入应限制where子句上的select语句,如下所示: select * FROM UEBERSICHT where :P904_COLUMN = :P904_AUSDRUCK; declare statement varchar2(4000); begin statement:= 'SELECT * FROM UEBERSICHT where :P904_COLUMN = :P904_AUSDRUCK;';
select * FROM UEBERSICHT where
:P904_COLUMN = :P904_AUSDRUCK;
declare
statement varchar2(4000);
begin
statement:= 'SELECT * FROM UEBERSICHT where
:P904_COLUMN = :P904_AUSDRUCK;';
return statement;
end;
:P904_列和:P904_austruck;都是用户输入所需的APEX项
当我写列名而不是:P904_column时,我会得到一个输出,否则不会。
但正如标题所说,我想实现一个动态专栏
我还尝试了PL/SQL,它返回如下SQL语句:
select * FROM UEBERSICHT where
:P904_COLUMN = :P904_AUSDRUCK;
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\u COLUMN
中的所有列都是相同的数据类型
您可以使用下面的类似内容,其中A
和B
是列名
select * FROM UEBERSICHT where
DECODE(:P904_COLUMN,'A',A,'B',B) = :P904_AUSDRUCK;
谢谢你的回答!这是个好主意,但没用。返回的值将被接受,但是没有输出。你能解释一下吗?再次感谢,它成功了!我的问题是:P904_列实际上是一个选择列表,我使用双引号作为返回值,当我删除它们时,它与您的方法一起工作。多谢各位!