本文介紹了WHERE子句中的Oracle動態SQL求值表達式的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我正在嘗試使用動態SQL將一個表達式傳遞到我的查詢的WHERE
子句中。該表達式可以包含多個篩選器/列。
與SO上的其他帖子類似,以下(示例1)也是有效的:
DECLARE
where_expression VARCHAR2(40) := q'[filter_column = 'some_value')]';
plsql_block VARCHAR2(500);
BEGIN
plsql_block := 'SELECT column FROM mytable';
EXECUTE IMMEDIATE plsql_block || ' WHERE ' || where_expression;
END;
/
使用占位符的這種方法(示例2)不起作用:
DECLARE
where_expression VARCHAR2(40) := q'[filter_column = 'some_value')]';
plsql_block VARCHAR2(500);
BEGIN
plsql_block := 'SELECT column FROM mytable WHERE :a';
EXECUTE IMMEDIATE plsql_block USING where_expression;
END;
/
Oracle在第8行(EXEC語句)返回錯誤:ORA-00920: invalid relational operator
。
我在示例2中做錯了什么,使用占位符的正確方式是什么?
推薦答案
我在示例2中做錯了什么,使用占位符的正確方式是什么?
占位符語法用于傳遞在執行語句時要檢查的值。預期用法如下所示:
DECLARE
v_out_1 varchar2(32);
v_out_2 varchar2(32);
plsql_block VARCHAR2(500);
BEGIN
plsql_block := 'SELECT column FROM mytable WHERE filter_column = :a';
EXECUTE IMMEDIATE plsql_block INTO v_out_1 USING 'some value';
EXECUTE IMMEDIATE plsql_block INTO v_out_2 USING 'another value';
END;
/
這篇關于WHERE子句中的Oracle動態SQL求值表達式的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,