我嘗試使用像SELECT語句中的REF CURSOR ....甲骨文 - 瞭解「使用」關鍵字...?
OPEN myREF FOR SELECT * FROM MYTABLE WHERE MYID IN (:Values) USING myPassedInValList;
但當myPassedInValList只有在一個單一ID這只是工作。我試圖使用像「1」的列表,「2」,「5」,等...
有人能告訴我,爲什麼這是行不通的。
我試圖谷歌,但「使用」是一種非常常見的詞:(
我嘗試使用像SELECT語句中的REF CURSOR ....甲骨文 - 瞭解「使用」關鍵字...?
OPEN myREF FOR SELECT * FROM MYTABLE WHERE MYID IN (:Values) USING myPassedInValList;
但當myPassedInValList只有在一個單一ID這只是工作。我試圖使用像「1」的列表,「2」,「5」,等...
有人能告訴我,爲什麼這是行不通的。
我試圖谷歌,但「使用」是一種非常常見的詞:(
你不能使用用戶定義類型(大概myPassedInValList是VARRAY或嵌套表?)在這樣的SQL。爲了引用在v從UDT alues,你需要使用table
功能,像這樣:
OPEN myREF
FOR SELECT *
FROM MYTABLE
WHERE MYID IN (select * from table(:Values))
USING myPassedInValList;
的table
功能將數組轉換成在存儲器中的表狀物體,它允許您訪問其內容的SQL 。
此,如果您的UDT被定義爲一個數據庫對象(CREATE TYPE...
)纔有效。如果你包的定義,則SQL將無法看到的定義。
據我所知,這是不可能的你可以嘗試繞過它使用動態SQL:字符串連接在一起OPEN myREF FOR SELECT * FROM MYTABLE WHERE MYID IN (
實際值的列表中,然後打開遊標。
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/dynamic.htm#i13057
/*you could build this string dynamically by looking through myPassedInValList and
concatenating them in the IN list.*/
v_stmt_str := 'SELECT * FROM MYTABLE WHERE MYID IN (''1'',''2'')'
/*Open cursor & specify bind argument in USING clause:*/
OPEN v_emp_cursor FOR v_stmt_str;