本文介紹了WHERE子句中的Oracle動(dòng)態(tài)SQL求值表達(dá)式的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
我正在嘗試使用動(dòng)態(tài)SQL將一個(gè)表達(dá)式傳遞到我的查詢(xún)的WHERE子句中。該表達(dá)式可以包含多個(gè)篩選器/列。
與SO上的其他帖子類(lèi)似,以下(示例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語(yǔ)句)返回錯(cuò)誤:ORA-00920: invalid relational operator。
我在示例2中做錯(cuò)了什么,使用占位符的正確方式是什么?
推薦答案
我在示例2中做錯(cuò)了什么,使用占位符的正確方式是什么?
占位符語(yǔ)法用于傳遞在執(zhí)行語(yǔ)句時(shí)要檢查的值。預(yù)期用法如下所示:
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;
/
這篇關(guān)于WHERE子句中的Oracle動(dòng)態(tài)SQL求值表達(dá)式的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,






