在我的存儲過程中,我有一個動態查詢 - where子句中的條件數量因輸入參數而異。動態sql中綁定變量的動態數量 - 打開遊標
in params - x, y, z
searchsql := 'select select1, select2, select3 from tableA where 1 = 1 and ';
if(x is not null) then
searchSql := searchSql || PKG_COMMON.GET_SQL_BINDTXTFLD(x,'select1','a');
-- above package will return AND upper(select1) like upper(:a)
cursorParams := cursorParams || ':' || x || ',';
end if;
if(y is not null) then
searchSql := searchSql || PKG_COMMON.GET_SQL_BINDTXTFLD(y,'select2','b');
-- above package will return AND upper(select2) like upper(:b)
cursorParams := cursorParams || ':' || y || ',';
end if;
--I am trimming the last comma of the cursor param
SELECT SUBSTR(cursorParams, 1, INSTR(cursorParams , ',', -1)-1)
INTO cursorParams FROM dual;
open resultCursor for searchSql using cursorParams
現在,我有此上述光標,其需要使用傳遞PARAMS被打開,然而,在這種情況下則params的數量取決於如何SQL是形成。所以我用cursorParams變量
動態形成的綁定變量,但數值並不具有約束力,但只設置到第一個參數
如何正確綁定,我已經嘗試過執行即時選項
我認爲這是一個類似的問題,下面的一個。 https://stackoverflow.com/questions/2514254/how-can-i-create-a-dynamic-where-clause – Jignesh
@Jignesh,這是動態查詢,而不是動態綁定變量與動態查詢 –
@SrikanthA這可能是一個https://stackoverflow.com/q/7816402/409172的副本我對這個問題的回答可能適用於此處。 –