gpt4 book ai didi

sql - 在 Oracle 中调用另一个存储过程

转载 作者:行者123 更新时间:2023-12-03 07:56:31 24 4
gpt4 key购买 nike

有没有人知道从另一个内部调用存储过程的方法,或者即使有可能?如果是这样,你会怎么做?

这是我的测试代码:

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>

关于sql - 在 Oracle 中调用另一个存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3415232/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com