CREATE-PROCEDURE

Eine in der Oracle-DB gespeicherte Prozedur wird mittels einer CREATE PROCEDURE-Anweisung erzeugt und kompiliert. Nur fehlerfrei angelegte Prozeduren können ausgeführt werden.

Die Spezifikation von Parametern ist optional. Beim Aufruf werden die Eingabe- sowie die Ein-/Ausgabe-Parameter von der aufrufenden Umgebung in die Prozedur übergeben, dann wird die Prozedur sequentiell von oben nach unten abgearbeitet und wenn die Ausführung beim END-Befehl angekommen ist, werden die Rückgabewerte mittels der Ausgabe- sowie der Ein-/Ausgabe-Parameter zurück an die aufrufende Umgebung übergeben.

Der Aufruf einer gespeicherten Prozedur kann aus anderen gespeicherten Prozeduren und Funktionen, PL/SQL-Böcken, TRIGGERN einfach durch die Verwendung der Prozedurnamen und ggf. seiner Parameter erfolgen. In interaktiven Ausführungsumgebungen wie z.B. Oracle SQL-Plus oder dem Oracle SQL-Developer muss ggf. das Schlüsselwort EXEC bzw. EXECUTE davorgesetzt werden.

Variablen- und Konstanten-Deklarationen erfolgen optional im Anschluss an das IS analog wie in anderen PL/SQL-Blöcken auch (DECLARE).

Als Anweisungen im Ausführungsteil sind alle PL/SQL-Befehle zugelassen, die SQL-DML-Anweisungen INSERT, UPDATE, DELETE? ohne Veränderungen an der SQL-Syntax, die SQL-DQL-Anweisung SELECT mit der INTO-Klausel (SELECT-INTO) oder als CURSOR-Anfrage sowie COMMIT und ROLLBACK.

Syntax der CREATE PROCEDURE-Anweisung:

   <CREATE PRODECURE Anweisung> ::=
      CREATE [OR REPLACE] PROCEDURE Name
             [ ( <Parameterdefinition> [ , <Parameterdefinition> ]... ) ]
      [IS|AS]
             [ <Deklaration>; [ <Deklaration>; ]... ]
      [PRAGMA-AUTONOMOUS-TRANSACTION]
      BEGIN
             <SQL- und PL/SQL-Anweisung>; 
             [ <SQL- und PL/SQL-Anweisung>; ]...
      [ EXCEPTION
             <Fehlerbehandlung> ]
      END;

   <SQL- und PL/SQL-Anweisung> := <SQL-Anweisung> | <PL/SQL-Anweisung>

Beispiel:

   CREATE OR REPLACE PROCEDURE Mitteln (p_x IN NUMBER, p_y IN NUMBER)
   IS
     V_Ergebnis NUMBER(20);
   BEGIN
     v_Ergebnis:= (p_x + p_y) / 2;
     DBMS_OUTPUT.PUT_LINE('Das Ergebnis ist: ' || V_Ergebnis);
   END; 

   -- damit die Ausgabe mittels DBMS_OUTPUT.PUT_LINE angezeigt wird, muss die 
   -- Servervariable SERVEROUTPUT angestellt sein
   -- EXECUTE ist nur die Einbettung der Funktion in einen anonymen Block in Oracle-SQL-Tools wie SQL*Plus oder SQL*Developer
   SET SERVEROUTPUT ON;
   EXECUTE Mitteln(8,22);

  -- Alternative zum obigen EXECUTE-Aufruf ist der folgende anonyme PL/SQL-Block, wobei der "/" in einer neuen Zeile einen Start des Blocks bewirkt:
  BEGIN
     Mitteln(8,22);
  END;
  /

siehe auch: Funktion

Quellen:

  • Faeskorn-Woyke, Heide; Bertelsmeier, Birgit; Riemer, Petra; Bauer, Elena: "Datenbanksysteme - Theorie und Praxis mit SQL2003, Oracle und MySQL", Pearson Education, München, 2007, ISBN 978-3-8273-7266-6
  • Feuerstein, Steven, Pribyl. Bill: "Oracle PL/SQL Programming", O'Reilly, 2009, ISBN-13: 978-0596514464
  • Oracle® Database SQL Language Reference 11g Release 1 (11.1) in http://docs.oracle.com/cd/B28359_01/server.111/b28286/toc.htm
  • Oracle® Database PL/SQL Language Reference 11g Release 2 (11.2) in http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/toc.htm
  • Saurabh, Gupta: "Oracle Advanced PL/SQL Developer Professional Guide", Packt Publishing Limited, 2012, ISBN 978-1-84968-722-5

Kategorie: Oracle-PL-SQL, C