PL/SQL (Procedural Language / Structured Query Language) ist die prozedurale Erweiterung von SQL in der Oracle-Datenbank. Oracle führte die Sprache ab Version 6 ein; mit Oracle 7 (1992) wurde sie zum festen Bestandteil des Datenbanksystems. Während SQL als deklarative Sprache beschreibt, was das Ergebnis sein soll, ergänzt PL/SQL Kontrollstrukturen, Variablen, Schleifen und Exception-Behandlung für komplexe Abläufe direkt im Server.
Blockstruktur
Jedes PL/SQL-Programm ist ein Block mit den Abschnitten DECLARE, BEGIN, EXCEPTION und END. Ein anonymer Block lässt sich direkt in SQL*Plus oder SQL Developer ausführen:
DECLARE
v_name VARCHAR2(50);
v_count NUMBER;
BEGIN
SELECT name INTO v_name FROM kunden WHERE id = 42;
v_count := 1;
DBMS_OUTPUT.PUT_LINE('Kunde: ' || v_name);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Kein Kunde gefunden');
END;
Wichtige Befehle und Konstrukte
- Variablen und Typen:
VARCHAR2,NUMBER,DATE,BOOLEAN; Feldtyp-Übernahme mit%TYPE, Zeilentyp mit%ROWTYPE. - Zuweisung:
:=(z. B.v_summe := 10 + 20;). - Kontrollfluss:
IF / ELSIF / ELSE,CASE, Schleifen mitLOOP ... EXIT WHEN,WHILEundFOR i IN 1..10. - Cursor:
CURSOR c IS SELECT ...mitOPEN,FETCH,CLOSEoder komfortablerFOR rec IN c-Schleife; dynamische Cursor überSYS_REFCURSOR. - Prozeduren und Funktionen:
CREATE OR REPLACE PROCEDUREbzw.FUNCTIONmitIN-/OUT-/IN OUT-Parametern undRETURNbei Funktionen. - Packages:
CREATE OR REPLACE PACKAGE(Spezifikation) undPACKAGE BODY(Implementierung) bündeln zusammengehörige Prozeduren; private Funktionen stehen nur im Body. - Trigger:
CREATE OR REPLACE TRIGGERmitBEFORE/AFTER INSERT OR UPDATE OR DELETE. - Exception-Handling: benannte Exceptions wie
NO_DATA_FOUND,TOO_MANY_ROWS,WHEN OTHERS THENsowieRAISEundRAISE_APPLICATION_ERROR. - DML direkt:
INSERT,UPDATE,DELETE,MERGEundSELECT ... INTOsind eingebettet; Status überSQL%ROWCOUNT,SQL%FOUND. - Dynamisches SQL:
EXECUTE IMMEDIATEfür zur Laufzeit gebaute Statements.
PL/SQL läuft serverseitig in der Oracle-Engine, spart Netzwerk-Roundtrips und ist Grundlage von Stored Procedures, Funktionen und Triggern im Oracle-Stack.
Verwandte Grundlagen: SQL-Befehle, T-SQL-Befehle, SQLite-Befehle.