版本:Oracle 11.2.0.4.0
操作系统:linux redhat 6.4
场景:
本地数据库MSTRPT调用远程数据库ADM存储过程,报错,执行脚本如下:
declare
v_return number;
begin
-- Call the procedure
sp_fct_loan('201-0-01', v_return);
end;
本地调用时报如下错误:
原因分析:
本地调用远端过程,远端过程要求不能有事务,事务必须本地控制,比如远端过程有ddl,commit,rollback什么的都是不被允许的,如果需要commit必须将commit放置在主过程中,否则就会出错。
问题解决:
1.在远程数据库的存储过程中不进行commit、rollback操作,也就是采用分布式事务管理的办法。
将Commit 去掉
2.使用Oracle自治事务。oralce自治事务的声明方法PRAGMA AUTONOMOUS_TRANSACTION,对BEGIN……END块是有效的。
CREATE OR REPLACE PROCEDURE SP_FCT_LOAN(V_DATE IN VARCHAR2,