在一台 Oracle 服务器上的存储过程中,我尝试将一条记录插入到另一台 Oracle 服务器上的表中,但失败并出现异常“分布式更新操作失败;需要回滚”
尽管我的代码包含在 BEGIN EXCEPTION END 中,但错误处理程序无法捕获错误。
我什至把它扔到了第二个错误处理程序中,但没有任何效果。知道为什么我无法捕捉到这个错误。程序编译没有问题。
我的主要目标是捕获错误,以便我可以返回对我的用户有用的东西。此外,如果可能的话,我想找出错误的根源。
注意 1:如果我取消注释引发“远程错误”的行,那么它会按预期被捕获。
注意 2:与远程服务器的连接是可靠的,因为我可以毫无问题地查询它。
两台服务器都是:Oracle Database 11g Release 11.2.0.3.0 - 64bit Production
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;