以 oracle apex 形式创建动态 where 子句

creating a dynamic where clause in oracle apex form

我正在创建一个参数化的顶点表单,我通过 select 列表从用户那里获取列名及其值。 当我在 where 子句 like

中使用它时
select columnnames 
from table 
where :P592_column = :P592_value ;

它没有返回任何输出,但是当我硬编码列名代替 :P592_column 它显示输出。

您不能将绑定变量用作动态列名。相反,将 CASE 语句中的列列入白名单:

SELECT columnnames 
FROM   table 
WHERE  CASE UPPER( :P592_column )
       WHEN 'COLUMN1' THEN column1
       WHEN 'COLUMN2' THEN column2
       WHEN 'COLUMN3' THEN column3
       WHEN 'COLUMN4' THEN column4
       END = :P592_value;

或多列:

SELECT columnnames 
FROM   table 
WHERE  CASE UPPER( :P592_column )
       WHEN 'COLUMN1' THEN column1
       WHEN 'COLUMN2' THEN column2
       WHEN 'COLUMN3' THEN column3
       WHEN 'COLUMN4' THEN column4
       END LIKE '%' || :P592_value || '%'
AND    CASE UPPER( :P592_column1 )
       WHEN 'COLUMN1' THEN column1
       WHEN 'COLUMN2' THEN column2
       WHEN 'COLUMN3' THEN column3
       WHEN 'COLUMN4' THEN column4
       END LIKE '%' || :P592_value1 || '%'
AND    CASE UPPER( :P592_column2 )
       WHEN 'COLUMN1' THEN column1
       WHEN 'COLUMN2' THEN column2
       WHEN 'COLUMN3' THEN column3
       WHEN 'COLUMN4' THEN column4
       END LIKE '%' || :P592_value2 || '%';