私の手順は次のようになります。
Declare
cur_1 Sys_Refcursor;
cur_2 Sys_Refcursor;
v_1 VARCHAR2(30);
v_2 VARCHAR2(30);
v_3 VARCHAR2(30);
v_4 VARCHAR2(30);
Begin
OPEN cur_1 for Select * from tab1@dblink1;
Loop
Fetch cur_1 into v_1, v_2;
EXIT WHEN cur_1%NOTFOUND;
OPEN cur_2 for Select * from tab2@dblink1 where col1 = v_1 and col2 = v2;
Loop
Fetch cur2 into v_3, v_4;
Exit when cur_2%notfound;
INSERT INTO local.tab3 values (v_1,v_2, v_3, v_4);
END Loop;
close cur_2;
End Loop;
close cur_1;
END;
上記の手順はコンパイルされますが、実行すると次のエラーが発生します。
ソケットから読み取る
データはありませ
んソケットから読み取るデータはありません ソケットから読み取るデータはありません
ソケットから読み取るデータはありません ソケットから読み取るデータはありません ソケット
から
読み取るデータはありません ソケットから
読み取るデータは
ありません いいえmore data to read from socket
...(Few more 'No more data to read from socket')IO エラー: ピアによる接続のリセット: ソケット書き込みエラー
プロセスが終了しました。
興味深いのは、内側のループ全体をコメントアウトすると、手順がエラーなしで実行されることです。したがって、内側のループに何か問題があることはわかっています (内側のループ内の挿入ステートメントのみにコメントを付けてみましたが、同じエラーが発生しました)。
私のlocaldbとdblink1データベースはどちらも同じバージョンです:
Oracle Database 11g Enterprise Edition リリース 11.2.0.1.0 - 64 ビット製品
PL/SQLリリース11.2.0.1.0 - 本番
コア 11.2.0.1.0 プロダクション
64 ビット Windows 用の TNS: バージョン 11.2.0.1.0 - プロダクション
NLSRTL バージョン 11.2.0.1.0 - プロダクション