ある Oracle サーバーのストアド プロシージャで、2 番目の Oracle サーバーのテーブルにレコードを挿入しようとすると、「分散更新操作に失敗しました。ロールバックが必要です」という例外で失敗します。
私のコードは BEGIN EXCEPTION END でラップされていますが、エラー ハンドラはエラーをトラップできません。
私はそれを2番目のエラーハンドラー内に投げても効果がありませんでした。このエラーをキャッチできない理由がわかりません。プロシージャは問題なくコンパイルされます。
私の主な目的は、エラーをキャッチして、ユーザーに役立つものを返すことです。さらに、可能であれば、エラーの根本に到達したいと考えています。
注1:「リモートエラー」を発生させる行のコメントを外すと、意図したとおりにキャッチされます。
注 2: リモート サーバーへの接続は安定しており、問題なくクエリを実行できます。
両方のサーバー: Oracle Database 11g リリース 11.2.0.3.0 - 64 ビット製品
BEGIN
begin
--raise_application_error( -20001, 'Remote Error' );
insert into RemoteSchema.RemoteObject@RemoteSystem
(field_one, field_two)
select value_one, value_two from dual;
exception
when others then
raise_application_error( -20000, 'Remote Error:' || sqlerrm );
end;
exception
when others then
raise_application_error( -20000, 'Caught Remote Error:' || sqlerrm );
end;