首页 >数据库 >mysql教程 >如何从一个 Oracle 存储过程调用另一个存储过程?

如何从一个 Oracle 存储过程调用另一个存储过程?

DDD
DDD原创
2024-12-24 15:20:11670浏览

How Can I Call One Oracle Stored Procedure from Within Another?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn