解决方案 »
- 可以同时对oracle同库中多表进行
- 請問用 oracle 的 report builder 如何實現列印條碼并能被條碼槍正常讀取功能﹖
- ORACLE 出错
- 錯誤訊息詢問
- 急!!!怎么写这个触发器?-自动删除表中90天以后的信息……来者有份
- 谁来帮帮我啊?
- 刚入门,请各位高手帮我看看一个存储过程,提示创建主体出错,万分感谢!!!!高分送上
- sql语句的初级问题,急呀,散分了!
- 数据库SUM求和后,原有的模式化没有了,即NUMBER(8,2)变为NUMBER了,小数点后两位给自动去掉,有何方法解决!
- (讨论)基于SQL Server的程序代码移植到Oracle数据库中需要注意那些问题?
- 为何大公司会用oracle的?
- 搭建Oracle11g RAC遇到的问题
谢谢,我已经检查过一次参数了,但是我还是再检查一次吧,再次感谢!
以下是我的测试:CREATE OR REPLACE PROCEDURE TEST1 IS
BEGIN
TEST2;
DBMS_OUTPUT.PUT_LINE('this is test1!!!');
END TEST1;
CREATE OR REPLACE PROCEDURE TEST2 IS
BEGIN
TEST1; DBMS_OUTPUT.PUT_LINE('this is test2!!');
END TEST2;
编译的时候确实会报错。想了一下我觉得报错是有道理的。
仔细想一下当你执行上面的procedure中的任何一个时其实已经陷入了死循环
还有个解释如下:
当你编译P1时,系统会检查你P1中包含的对象是否有效,当检查P2时,其实P2此时处于无效的状态,P2处于无效状态的原因在于P2中包含有P1(此时P1正在编译,并不是一个有效的对象)。如此一来就会出现编译无法通过的情况。
以上只是我的个人观点。
不知道其他高手能有解决方法么?
从程序的角度来说建议还是不要这样循环调用,可读性较差,看程序的也很痛苦。就好比C中的递归
用前向声明,那你就把全部的procedure整合在一个PACKAGE里面嘛
不知道这个该如何操作?
不知道这个该如何操作?
创建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 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;
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;是这样子的,编译的问题果然能够解决,非常感谢!