PL/SQL

PL/SQL steht für “Procedural Language extensions to SQL (Structured Query Language)” und findet vor allem bei Oracle Verwendung. Während SQL die Daten manipuliert, konzentriert sich PL auf die Verfahren (=was ist zu tun und wie macht man es). Durch PL/SQL werden unter anderem Schleifen und Bedingungen möglich. Anstelle von einzelnen Abfragen (Daten manipulieren) ermöglicht PL/SQL durch Blöcke die Erstellung eines gesamten Programmes (Applikation). 

PL/SQL Architektur

  • PL/SQL Block: Dieser beinhaltet die einzelnen Abschnitte des Programmcodes (Deklaration, Ausführung, Ausnahmen). Er besteht aus SQL und PL/SQL Elementen. 
  • PL/SQL Engine: Diese kümmert sich um die Ausführung des PL/SQL Blocks und spaltet diesen in PL/SQL Units sowie SQL Statements. Letzere werden an den Datenbankserver zur Ausführung gesendet. Diese Engine kann am Datenbankserver als auch am Anwendungsserver installiert werden. 
  • Datenbankserver: Herzstück und Speicher von Daten. Der Datenbankserver interagiert mit der PL/SQL Engine. Der dazugehörige SQL Exekutor führt die SQL Statements aus. 

Typen von PL/SQL Units

Es gibt verschiedene Typen einer PL/SQL Unit. Diese sind unter anderem: 

  • Anonyme Blöcke: Erstellung, Kompilierung und Ausführung in einem einzigen Vorgang. Durch das fehlen eines Namens, können diese nicht in der Datenbank gepeichert werden.
  • Bibliotheken
  • Funktionen (=Block mit Namen): Muss einen eindeutigen Namen zugewiesen bekommen und wird durch die Erstellung und Kompilierung als Objekt in der Datenbank gespeichert. Das Startkeyword ist CREATE anstelle von DECLARE. 
  • Prozeduren (=Block mit Namen): Muss einen eindeutigen Namen zugewiesen bekommen und wird durch die Erstellung und Kompilierung als Objekt in der Datenbank gespeichert. Das Startkeyword ist CREATE anstelle von DECLARE. 
  • Trigger
  • Typen

Abschnitte eines PL/SQL Blocks

Ein PL/SQL Block besteht aus dem Programm zwischen den beiden Keywords BEGIN und END;. Optional kann auch ein Deklarationsteil sowie ein Block zur Behandlung von Ausnahmen hinzugefügt werden. Die Basisstruktur ist nachfolgend ersichtlich. 

DECLARE

— Deklarationsteil für anonyme Blöcke und Trigger (Optional)

— Deklaration von Variablen, Trigger und Ausnahmen

— outputtext VARCHAR2(50);

BEGIN

— Programm / SQL

— Mindestens eine ausführbare Codezeile

— outputtext := ‘Output Text’;

— dbms_output.put_line(outputtext );

Kommentar (einzelne Zeile mit zwei Bindestrichen)

/* Dieses Kommentar geht über

mehrere Zeilen */

EXCEPTION

— Behandlung einer Ausnahme / Errors (Optional)

END;

— Indikator für Ende mit Strichpunkt

/

— Ein Block sollte mit einem Schrägstrich abgeschlossen werden um den Code an die PL/SQL Engine / den Compiler zu schicken. 

Ein einfaches Programm

BEGIN
    dbms_output.put_line('Text für Output');
END;
/

Sollte kein Output erscheinen, ist nachfolgende Codezeile einzugeben um den Serveroutput einzuschalten: 

set serveroutput on

Kommentare

Eine einzelne Zeile wird mit einem doppelten Bindestrich kommentiert (–). Ein Kommentar über mehrere Zeilen erfolgt zwischen den Keywords /* und */.

Datentypen

Im Gegensatz zu SQL bietet PL/SQL eine höhere Anzahl an Datentypen. Die gängigsten sind jedoch (wie auch bei SQL):

  • Numeric
  • Character
  • DateTime
  • LOB

Characters

Hier kann zwischen verschiedenen Datentypen unterschieden werden. 

  1. CHAR: Die Größe (Speichergröße) der Variable wird bei der Deklaration definiert und ist fix. In der Variable wird ein Text gespeichert. Wird der CHAR mit einer Größe von 10 Bytes definiert, so werden auch 10 Bytes an Speicher benützt – unabhängig vom Inhalt. 
  2. VARCHAR2: Diese Variable speichert ebenso Text, allerdings ist hier die Länge (Speichergröße) nicht fix. Bei diesem Variablentyp wird nur die Größe des Textes benützt und nicht die definierte maximale Größe (definiert in der Deklaration) der Variable. Aufgrund der Eigenschaft der optimalen Speicherverwendung sollte immer VARCHAR2 anstelle vom CHAR benützt werden.