Gespeicherte Prozeduren aus anderen in Oracle aufrufen
In Oracle kann es zu einem Szenario kommen, in dem es notwendig ist, eine gespeicherte Prozedur aus anderen heraus aufzurufen innerhalb eines anderen. Dies kann mit verschiedenen Methoden erreicht werden, die wir in diesem Artikel untersuchen werden.
Testfall
Betrachten Sie den folgenden Testcode:
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;
Problem und Lösung
Das Problem mit dem angegebenen Code liegt in der letzten Zeile, die direkt versucht Rufen Sie die gespeicherten Prozeduren auf. Dies kann mit einer der folgenden drei Methoden gelöst werden:
1. Aufrufsyntax
Oracles SQL-Referenz definiert die Syntax zum Aufrufen gespeicherter Prozeduren wie folgt:
CALL <procedure_name>(<argument_list>);
Schließen Sie den Prozedurnamen in Klammern ein, auch wenn keine Argumente übergeben werden.
CALL test_sp_1();
2. Anonymer PL/SQL-Block
In einem anonymen PL/SQL-Block kann man gespeicherte Prozeduren aufrufen, ohne sie explizit zu benennen.
BEGIN test_sp_1; END; /
3. Exec-Befehl (SQL*Plus)
SQL*Plus stellt den Exec-Befehl als Verknüpfung für anonyme Blöcke bereit. Es führt die angegebene gespeicherte Prozedur aus, als wäre sie Teil eines anonymen Blocks.
EXEC test_sp_1;
Beispiel
Hier ist ein voll funktionsfähiges Beispiel:
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
Ausgabe:
Testing Test works Testing Test works Testing Test works
Das obige ist der detaillierte Inhalt vonWie kann ich eine gespeicherte Oracle-Prozedur aus einer anderen heraus aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!