Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL上的动态列不';t工作(APEX,交互式报告)_Sql_Oracle_Report_Oracle Apex - Fatal编程技术网

SQL上的动态列不';t工作(APEX,交互式报告)

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;';

我尝试在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;';

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_列实际上是一个选择列表,我使用双引号作为返回值,当我删除它们时,它与您的方法一起工作。多谢各位!