SQL 上的动态列不起作用(APEX、交互式报告)
Dynamic Column on SQL doesn't work (APEX,Interactive Report)
我尝试在 APEX(19.2) 上实现一个页面,用户必须在其中输入一个列名。此输入应限制 where 子句上的 select 语句,如下所示:
select * FROM UEBERSICHT where
:P904_COLUMN = :P904_AUSDRUCK;
:P904_COLUMN 和:P904_AUSDRUCK;都是 APEX 项目,用户输入需要这些项目。
当我写列名而不是 :P904_COLUMN 时,我会得到一个输出,否则不会。
但是正如标题所说,我想实现一个动态列。
我也用 PL/SQL 尝试过,其中 returns 一个 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: Parsing returned query results in "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;
我尝试在 APEX(19.2) 上实现一个页面,用户必须在其中输入一个列名。此输入应限制 where 子句上的 select 语句,如下所示:
select * FROM UEBERSICHT where
:P904_COLUMN = :P904_AUSDRUCK;
:P904_COLUMN 和:P904_AUSDRUCK;都是 APEX 项目,用户输入需要这些项目。
当我写列名而不是 :P904_COLUMN 时,我会得到一个输出,否则不会。 但是正如标题所说,我想实现一个动态列。
我也用 PL/SQL 尝试过,其中 returns 一个 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: Parsing returned query results in "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;