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