Heim >Datenbank >MySQL-Tutorial >Wie kann ich eine gespeicherte Oracle-Prozedur aus einer anderen heraus aufrufen?

Wie kann ich eine gespeicherte Oracle-Prozedur aus einer anderen heraus aufrufen?

DDD
DDDOriginal
2024-12-24 15:20:11670Durchsuche

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

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn