有谁知道一种方法,或者即使有可能,从另一个存储过程中调用存储过程?如果是这样,你会怎么做?
这是我的测试代码:
SET SERVEROUTPUT ON;
DROP PROCEDURE test_sp_1;
DROP PROCEDURE test_sp;
CREATE PROCEDURE test_sp
AS
BEGIN
DBMS_OUTPUT.PUT_LINE('Test works');
END;
/
CREATE PROCEDURE test_sp_1
AS
BEGIN
DBMS_OUTPUT.PUT_LINE('Testing');
test_sp;
END;
/
CALL test_sp_1;
您的存储过程按编码工作。问题出在最后一行,它无法调用任何一个存储过程。
SQL*Plus 中的三个选择是:call
, exec
,以及一个匿名 PL/SQL 块。
call
似乎是一个 SQL 关键字,并且记录在 SQL 参考中。http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG语法图表明即使没有参数传递给调用例程,也需要括号。
CALL test_sp_1();
匿名 PL/SQL 块是不在命名过程、函数、触发器等内部的 PL/SQL。它可用于调用您的过程。
BEGIN
test_sp_1;
END;
/
Exec
是一个 SQL*Plus 命令,是上述匿名块的快捷方式。EXEC <procedure_name>
将被传递到数据库服务器BEGIN <procedure_name>; END;
完整示例:
SQL> SET SERVEROUTPUT ON
SQL> CREATE OR REPLACE PROCEDURE test_sp
2 AS
3 BEGIN
4 DBMS_OUTPUT.PUT_LINE('Test works');
5 END;
6 /
Procedure created.
SQL> CREATE OR REPLACE PROCEDURE test_sp_1
2 AS
3 BEGIN
4 DBMS_OUTPUT.PUT_LINE('Testing');
5 test_sp;
6 END;
7 /
Procedure created.
SQL> CALL test_sp_1();
Testing
Test works
Call completed.
SQL> exec test_sp_1
Testing
Test works
PL/SQL procedure successfully completed.
SQL> begin
2 test_sp_1;
3 end;
4 /
Testing
Test works
PL/SQL procedure successfully completed.
SQL>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)