首頁 >資料庫 >mysql教程 >如何從一個 Oracle 預存程序呼叫另一個預存程序?

如何從一個 Oracle 預存程序呼叫另一個預存程序?

DDD
DDD原創
2024-12-24 15:20:11673瀏覽

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;

問題與解決方案

問題與解決方案

問題與解決方案

CALL <procedure_name>(<argument_list>);
給定程式碼的問題在於最後一行,嘗試直接呼叫預存程序。這可以透過使用以下三種方法之一來解決:

CALL test_sp_1();
1.呼叫語法

Oracle 的SQL 參考定義了呼叫儲存過程的語法,如下所示:

將過程名稱括在括號中,即使沒有傳遞參數也是如此。
BEGIN
    test_sp_1;
END;
/

2。匿名 PL/SQL 區塊

在匿名 PL/SQL 區塊中,無需明確命名即可呼叫預存程序。
EXEC test_sp_1;

3. Exec 指令 (SQL*Plus)

SQL*Plus 提供 exec 指令作為匿名區塊的捷徑。它執行指定的預存程序,就像它是匿名區塊的一部分一樣。
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