これは私の最初の(編集された)stackoverflowの質問ですので、ご容赦ください。
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
myProc@myDblink(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 から派生した参照カーソルを変換/記述する方法はありますか? もしそうなら、どのように?そうでない場合、なぜですか?
あらゆる/すべての支援に感謝します!