這是我第一次(編輯)的stackoverflow問題,所以請忍受我。如何在Oracle中描述與動態SQL關聯的引用遊標?
在Oracle 11g中,我有必要描述/詢問從過程調用在另一個數據庫在DBLINK,在實際的SQL並不一定爲「明確的」返回的參考指針的基礎列,但有時會動態生成。
例如:
declare
v_ref_cur sys_refcursor;
v_cur_num number;
v_col_count number;
v_col_table dbms_sql.desc_tab3;
begin
[email protected](v_ref_cur, 'myvalue');
v_cur_num := dbms_sql.to_cursor_number(v_ref_cur);
dbms_sql.describe_columns3(v_cur_num, v_col_count, v_col_table);
...
end
如果MYPROC()其他數據庫上有一個像 「明確的」 SQL語句:
open cursor for select * from foo where bar = myParam;
光標轉換和描述(仍然)工作得很好 - 我可以確定過程返回的列名,類型,長度等。
,但如果MYPROC()其他數據庫上涉及動態SQL,如:
v_sql := 'select * from foo where bar = ''' || myParam || '''';
open cursor for v_sql;
試圖調用dbms_sql.to_cursor_number()時,我得到一個ORA-01001無效的遊標的錯誤。
有沒有一種方法來轉換/描述從遠程過程調用的動態SQL派生的引用遊標?如果是這樣,怎麼樣?如果不是,爲什麼不呢?
感謝您的任何/所有幫助!