| Benannte Blöcke (stored objects) |
|
|
| Donnerstag, 16. Oktober 2008 um 15:09 | ||||
|
In den vorhergehenden Kapiteln haben wir die grundlegenden Sprachelemente und ihre Verhaltensweisen kennen gelernt. Wenden wir uns nun den auf Datenbankseite abgelegten PL/SQL Programmen zu, den sogenannten Stored Procedures, Stored Functions und Stored Packages. Bis jetzt mussten wir unseren Code für die Ausführung immer wieder erneut zum Server schicken, unsere Programme existierten auf Serverseite nur für die Dauer ihrer Ausführung. Viele Entwickler halten die Eigenschaft, PL/SQL Programme auf Datenbankseite dauerhaft ablegen zu können, für den wichtigsten Vorzug der Nutzung von PL/SQL. Wir nutzen Packages, Procedures und Functions in PL/SQL, um große Anwendungen und ihre Einzelteile zu modularisieren. Modularisierter Code ist gut, denn das bedeutet
Unterschiede zwischen Package, Procedure und FunctionEine Prozedur ist ein benannter PL/SQL block. Wir kommunizieren mit ihm über eine Parameterliste, die sowohl die Eingabewerte, aber auch Ausgabewerte enthält. Prozeduren sind ausführbar und müssen daher mindestens auch eine ausführbare Anweisung enthalten. Eine Funktion ist ebenfalls ein benannter PL/SQL Block, wird aber benutzt wie ein Ausdruck. Eine Funktion liefert einen Wert zurück, der i.d.R. einer Variablen zugewiesen wird. Argumente werden der Funktion ebenfalls mit einer Parameterliste übergeben. Neben dem Rückgabewert können Funktionen genau wie Prozeduren die übergebenen Argumente verändern. Eine Package ist eine benannte Sammlung von Prozeduren und Funktionen, aber auch von Ausnahmen, Datentypen, Variablen. Packages haben im Gegensatz zu Prozeduren und Funktionen einen Zustand, da bspw. Variablenwerte nicht nach Ende einer Prozedur flüchtig sind, sondern bis zum Ende der Nutzersitzung erhalten bleiben. Packages werden wir später viel Aufmerksamkeit schenken. All diese Module haben eine identische Blockstruktur. Entgegen der Blockstruktur eines anonymen Blocks kommt hier eine Sektion hinzu: Der Header. Der Deklarationsabschnitt, wie wir ihn aus anonymen Blöcken kennen, existiert natürlich noch immer, wird aber nicht mehr explizit mit DECLARE eingeleitet. Variablen- und Typdeklaration folgen sofort auf den Headerabschnitt bis zum Beginn des ausführbaren Teils, der wie gewohnt mit BEGIN eingeleitet wird. In unserem Beispiel wollen wir eine Tabelle erzeugen namens plsql15_Test. Die Tabelle soll aus zwei Spalten bestehen:
Unsere Tabelle soll mit 1000 Datensätzen gefüllt werden mit Hilfe eines anonymen PL/SQL Blocks. Danach füllen wir sie mit weiteren 1000 Datensätzen mit Hilfe eines benannten PL/SQL Blocks (Prozedur). Der anonyme Block ist folgender
Wenn Sie den Code ausführen, sollten die ersten 1000 Datensätze in Ihrer Tabelle stehen. Jetzt packen wir unseren Code in einen PL/SQL Block (Prozedur).
Wenn wir diesen Code ausführen, antwortet ORACLE wie folgt.
Das Anlegen der Prozedur hat aber noch nicht zum Ausführen des Codes geführt. Unser Code ist jetzt dauerhaft in der Datenbank abgelegt. Um die Prozedur auszuführen, gibt es zwei Methoden. Entweder wir rufen die Prozedur vom SQL-Prompt auf mit
Alternativ können wir die Prozedur aus einem anderen (auch anonymen) PLSQL Block aufrufen.
Haben Sie beide Varianten ausprobiert, haben wir jetzt also insgesamt 3000 Datensätze in der Tabelle. Benannte Blöcke sind komplett in die Transaktion des Benutzers eingebettet. Alles was ein benannter Block verändert, kann also nach Ausführung zurückgenommen werden (Rollback).
|
||||

