Datenbanken 14. Übung Aufgabe: PL/SQL Lösungsschritte: PL/SQL 1ist die Basis für die folgenden logischen Elemente von Anwendungen: - SQL*Plus-Skript. Ein SQL*Plus-Skript kann PL/SQL-Unterprogrammblöcke enthalten. - Gespeichere Prozeduren oder Funktionen. Eine gespeicherte Prozedur oder eine Funktion ist ein PL/SQL-Unterprogramm, das durch eine Client-Anwendung oder einen Anwendungs-Trigger eines Oracle-Werkzeigs aufgerufen werden kann. - Datenbanktrigger. Ein Datenbanktrigger ist ein PL/SQL-Unterprogramm, das eine Aktion aufgrund der Ausführung einer DML-Anweisung (z.B. insert, update oder delete) an einer Datenbanktabelle durchführt. - Package. eine Menge von PL/SQL-Prozeduren, -Funktionen, -Cursor und anderen PL/SQL-Variablen, die in einem Paket gebündelt werden. - Anwendungstrigger. Entwicklungswerkzeuge für Oracle-Anwendungen wie Oracle Forms und Oracle Reports sind mit einer PL/SQL-Engine ausgestattet, so dass Entwickler mit PL/SQL Anwendungstrigger konstruieren können. Ein PL/SQL-Programm besteht aus Prozeduren, Funktionen oder anonymen Blöcken. Ein anonymer Block ist ein unbekannter PL/SQL-Block, der keine Argumente besitzt und keine Werte zurückgibt. Anonyme Blöcke kommen häufig in Skripten vor, die in einer SQL*Plus-Sitzung ausgeführt werden. Prozeduren, die in anonymen Blöcken deklariert und aufgerufen werden, sind temporär. Wenn die Ausführung der anonymen Blöcke beendet ist, sind sie für Oracle nicht mehr vorhanden. Die oberste Ebene der Struktur eines PL/SQL-Blocks enthält einen optionalen Abschnitt mit Deklarationen, einen ausführbaren Abschnitt und einen optionalen Abschnitt für die Behandlung von Exceptions von Pl/SQL und SQL. PL/SQL unterstützt die Verwendung von benannten Prozeduren und Funktionen. Eine PL/SQLProzedur führt diverse Aktionen durch und kann optionale Parameter haben. Eine PL/SQL-Funktion gibt einen Wert mit einem bestimmten Datentyp zurück und kann ebenfalls optionale Parameter haben. Prozeduren CREATE [OR REPLACE] PROCEDURE proc_name [(<parameter_liste>) IS <pl/sql_body> / - [OR REPLACE] : existierende Prozedurdefinition wird überschrieben - (<parameter_liste>) : Deklaration der formalen Parameter (<variable> [IN | OUT |IN OUT] <datatype>, ….. <variable> [IN | OUT |IN OUT] <datatype>) - IN, OUT, IN OUT geben an, wie die Prozedur / Funktion auf die Parameter zugreifen kann (Lesen, Schreiben, beides) - DEFAULT ist IN - Bei OUT und IN OUT muß beim Aufruf eine Variable angegeben sein, bei IN ist auch eine Konstante erlaubt. 1 (vgl. Skriptum 2.3.2.5, 1. PL/SQL) 1 Datenbanken - <datatype> : Alle von PL/SQL unterstützten Datentypen; ohne Längenangabe (VARCHAR2 anstelle von bspw. VARCHAR2(20) - pl/sql_body enthält die Definition der Prozedur in PL/SQL Funktionen Analog, zusätzlich wird der Datentyp des Ergebnisses angegeben. CREATE [OR REPLACE] FUNCTION funct_name [(<parameter_liste>) RETURN <datatype> IS <pl/sql_body> / Im Falle von "... created with compilation errors" SHOW ERRORS ausgeben lassen Prozeduren und Funktionen können mit DROP POCEDURE / FUNCTION name gelöscht werden. - Aufruf von Prozeduren im Pl/SQL-Skript: prozedurname(arg1, arg2 , ... , argn) - Aufruf von Prozeduren in SQL*PLUS: execute prozedurname(arg1, arg2, ... , argn) - Verwendung der Funktion in PL/SQL ... funktionsname(arg1, arg2 , ... , argn) wie in anderen Programmiersprachen Die systemeigene Tabelle DUAL kann zur Ausgabe des Ergebnisses freier Funktionen verwendet werden. 2