Oracle: Prozeduren

Aus Wikibooks


Einstieg[Bearbeiten]

Möglichkeiten, eine Prozedur zu erstellen:

  • Eine Prozedur kann erstellt werden, indem ein compiliertes Programm als Aktion definiert wird.
  • Eine Procedur kann auch eine PL/SQL-Script als Verarbeitungsteil erhalten.

Prozeduren sind nützlich, um regelmäßig wiederkehrende Arbeitsabläufe zu automatisieren z.B. um Installationsarbeiten durchzuführen.

Beispiel:

 CREATE OR REPLACE PROCEDURE spins IS
 BEGIN
    INSERT INTO tdept (deptno, deptname, mgrno, admrdept)
    VALUES ('A00', 'SPIFFY COMPUTER DIV.', '000010', 'A00');
    INSERT INTO tdept (deptno, deptname, mgrno, admrdept)
    VALUES ('B01', 'PLANNING            ', '000020', 'A00');
    INSERT INTO tdept (deptno, deptname, mgrno, admrdept)
    VALUES ('C01', 'INFORMATION CENTER  ', '000030', 'A00'); 
 END;

Die Procedur wird im SQLPLUS aufgerufen mit dem Befehl:

 EXECUTE spins;

Innerhalb eines PL/SQL-Scripts wird die Procedur nur durch Angabe ihres Namens aufgefufen.

 BEGIN
    spins;
 END;

Parameterübergabe[Bearbeiten]

Wenn man der Prozedur Parameter übergeben will, dann wird unterschieden in:

  • IN: Die aufrufende Umgebung übergibt einen Wert an die Prozedur. Dieser Parameter kann innerhalb der Verarbeitung nicht verändert werden. IN ist der default Parameter-Modus
  • OUT: Die aufrufende Umgebung übergibt eine Variable an die Prozedur, die innerhalb der Prozedur als nicht initialisiert betrachtet wird. Wenn innerhalb der Verarbeitung diesem Parameter ein Wert zugewiesen wird, dann wird dieser an die aufrufende Umgebung zurückgegeben.
  • IN OUT: Die Aufrufende Umgebung übergibt eine Variable an die Prozedur. Diese kann innerhalb der Prozedur verwendet werden und auch geändert werden. Der geänderte Wert wird der aufrufenden Umgebung mitgeteilt.


Einfache Prozedur, die einen Parameter übergeben bekommt:

 CREATE OR REPLACE PROCEDURE myfirstproc(Parm1 IN NUMBER)
 IS
 BEGIN
    NULL;
 END;

Es ist auch möglich, Werte von Prozeduren verändern zu lassen:

 CREATE OR REPLACE PROCEDURE mysecondproc(param1 IN OUT NUMBER)
 IS
 BEGIN
    Param1 := Param1 + 42;
 END;

Wird dieses zweite Beispiel verwendet, liefert der entsprechende Test:

 DECLARE
   x NUMBER := 13;
 BEGIN
    DBMS_OUTPUT.PUT_LINE( x );
    mysecondproc( x );
    DBMS_OUTPUT.PUT_LINE( x );
 END;

wie zu erwarten die Werte 13 und 55.

Für die Übergabe der Daten per Referenz gibt es die NOCOPY Option bei den Parametern.

Verschlüsselung des Quelltextes[Bearbeiten]

...

Übersicht über Proceduren, die bei der Installation mitgeliefert werden[Bearbeiten]

...