关于
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都可以编译通过
已经折腾了好长时间,大家帮忙分析一下,谢谢了
------解决方案-------------------- 引用: Quote: 引用:
创建PACKAGE的时候在包头里面对procedure的声明就是前向声明
是这样吗?
CREATE OR REPLACE
PACKAGE TEST AS
/* TODO enter package declarations (types, exceptions, methods etc) here */
procedure TEST1;
procedure TEST2;
END TEST;
测了一下,编译还是通不过。。
以下编译能通过:
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 ;