关于oracle存储过程互相调用编译出错的有关问题。
关于oracle存储过程互相调用编译出错的问题。。
公司一个DB2的数据库移植到Oracle上,有一个定时调度任务需要调用存储过程A,A运行后,要调用其他10个互相调用的存储过程,基本过程就是A调用B,C,D等等,然后B,C,D又存在互相调用,问题是编译无法通过,A中报B,C无效,B中报C,D无效,C中又报B,D无效,D中又报C无效。
我先在D中把C注释掉,C中把B,D注释掉这样重新编译后A,B,C,D都可以通过,但是当我把D中注释掉的C打开后重新编译的时候再次报错,对象无效。。 并不是所有存储过程中都会报对象无效,比如在存储过程E,F中,B,C都可以编译通过
已经折腾了好长时间,大家帮忙分析一下,谢谢了
------解决方案--------------------
以下编译能通过:
公司一个DB2的数据库移植到Oracle上,有一个定时调度任务需要调用存储过程A,A运行后,要调用其他10个互相调用的存储过程,基本过程就是A调用B,C,D等等,然后B,C,D又存在互相调用,问题是编译无法通过,A中报B,C无效,B中报C,D无效,C中又报B,D无效,D中又报C无效。
我先在D中把C注释掉,C中把B,D注释掉这样重新编译后A,B,C,D都可以通过,但是当我把D中注释掉的C打开后重新编译的时候再次报错,对象无效。。 并不是所有存储过程中都会报对象无效,比如在存储过程E,F中,B,C都可以编译通过
已经折腾了好长时间,大家帮忙分析一下,谢谢了
------解决方案--------------------
以下编译能通过:
CREATE OR REPLACE PACKAGE TEST IS
PROCEDURE TEST1;
PROCEDURE TEST2;
END TEST;
CREATE OR REPLACE PACKAGE BODY TEST IS;
PROCEDURE TEST1 IS
BEGIN
TEST2;
DBMS_OUTPUT.PUT_LINE('this is test1!!!');
END TEST1;
PROCEDURE TEST2 IS
BEGIN
TEST1;
DBMS_OUTPUT.PUT_LINE('this is test2!!!');
END TEST2;
BEGIN
NULL;
END TEST