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 mit LOOP ... EXIT WHEN, WHILE und FOR i IN 1..10.
  • Cursor: CURSOR c IS SELECT ... mit OPEN, FETCH, CLOSE oder komfortabler FOR rec IN c-Schleife; dynamische Cursor über SYS_REFCURSOR.
  • Prozeduren und Funktionen: CREATE OR REPLACE PROCEDURE bzw. FUNCTION mit IN-/OUT-/IN OUT-Parametern und RETURN bei Funktionen.
  • Packages: CREATE OR REPLACE PACKAGE (Spezifikation) und PACKAGE BODY (Implementierung) bündeln zusammengehörige Prozeduren; private Funktionen stehen nur im Body.
  • Trigger: CREATE OR REPLACE TRIGGER mit BEFORE/AFTER INSERT OR UPDATE OR DELETE.
  • Exception-Handling: benannte Exceptions wie NO_DATA_FOUND, TOO_MANY_ROWS, WHEN OTHERS THEN sowie RAISE und RAISE_APPLICATION_ERROR.
  • DML direkt: INSERT, UPDATE, DELETE, MERGE und SELECT ... INTO sind eingebettet; Status über SQL%ROWCOUNT, SQL%FOUND.
  • Dynamisches SQL: EXECUTE IMMEDIATE fü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.