在 Oracle 中调用其他存储过程
在 Oracle 中,可能会遇到一种情况,需要从 Oracle 中调用一个存储过程在另一个之中。这可以使用多种方法来实现,我们将在本文中进行探讨。
测试用例
考虑以下测试代码:
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;
问题与解决方案
给定代码的问题在于最后一行,尝试直接调用存储过程。这可以通过使用以下三种方法之一来解决:
1.调用语法
Oracle 的 SQL 参考定义了调用存储过程的语法,如下所示:
CALL <procedure_name>(<argument_list>);
将过程名称括在括号中,即使没有传递参数也是如此。
CALL test_sp_1();
2。匿名 PL/SQL 块
在匿名 PL/SQL 块中,无需显式命名即可调用存储过程。
BEGIN test_sp_1; END; /
3. Exec 命令 (SQL*Plus)
SQL*Plus 提供 exec 命令作为匿名块的快捷方式。它执行指定的存储过程,就像它是匿名块的一部分一样。
EXEC test_sp_1;
示例
这是一个完整的示例:
SET SERVEROUTPUT ON; CREATE OR REPLACE PROCEDURE test_sp AS BEGIN DBMS_OUTPUT.PUT_LINE('Test works'); END; / CREATE OR REPLACE PROCEDURE test_sp_1 AS BEGIN DBMS_OUTPUT.PUT_LINE('Testing'); test_sp; END; / CALL test_sp_1(); -- Direct call exec test_sp_1; -- SQL*Plus shortcut BEGIN test_sp_1; END; -- Anonymous PL/SQL block
输出:
Testing Test works Testing Test works Testing Test works
以上是如何从一个 Oracle 存储过程调用另一个存储过程?的详细内容。更多信息请关注PHP中文网其他相关文章!