Prozedurale Sprachen
Begriffserklärung
Prozedurale Programmierung ist der Ansatz, Computerprogramme aus kleineren Teilproblemen (oder genauer: Aufgaben), die als Prozeduren bezeichnet werden, aufzubauen.
Der kleinste und unteilbare Schritt bei diesem Verfahren ist die Anweisung.
Der Programmierer befiehlt dem Computer durch das Programm, was er in welcher Reihenfolge zu tun hat.
Bei diesem Vorgang zielt man darauf ab, Quellcode wiederverwendbar und einfach zu gestalten, was jedoch nicht immer gelingt.
[Quelle: de.wikipedia.org]
Anwendungsbereich
Im Datenbankbereich wird prozedurale Programmierung zur Implementierung der Prozesssteuerung insbesondere im ETL-Bereich verwendet. Dabei wird oft mit sog. Cursors gearbeiten, was dem Programmierer ermöglicht, für jede Zeile spezifische Anweisungen zu erstellen.
Häufig werden prozedurale Programme auch für wiederkehrende Abläufe wie zum Beispiel Benutzer anlegen, Privilegien verteilen oder ein Schema kopieren verwendet.
Darüber hinaus existieren im Data Warehousing-Bereich sehr komplexe Abfragen, die sich nicht mit Hilfe von plain SQL lösen lassen:
- Parameterabhängige Tabellen- und Spaltennamen
- Iterative Prozesse (konvexe Hülle, etc.)
Datenbankmanagementsysteme stellen Nutzern für diesen Zweck eine prozedurale Sprache zur Verfügung. Dabei gibt es im Unterschied zu SQL keinen Standard, vielmehr unterscheiden sich die Implementierungen sowohl syntaktisch als auch funktional:
- Oracle: PL/SQL
- Microsoft: T-SQL
- IBM: DB2 SQL
- Teradata: 'SQL'
- MySQL: 'SQL'
Skripting in EXASolution
Eine Stored Procedure wird in EXASolution als ein 'SCRIPT' bezeichnet.
Es werden einerseits gängige Konzepte der Programmierung zur Verfügung gestellt wie Variablendeklarationen, Kontrollstrukturen, Modularisierung und das Reagieren auf Fehlerzustände. Diesbezüglich basiert die EXASOL-Sprache auf LUA (5.1).
Zusätzlich können in Skripten SQL-Befehle ausgeführt werden und ihre Ergebnisse verarbeitet werden. Dies ermöglicht eine einfache Implementierung für wiederkehrende Aufgaben, z.B. einen Benutzer mit dazugehörigen Privilegien anlegen.
Rückgabewerte von Skripten:
- eine Zahl (ROWCOUNT),
- eine Ergebnistabelle (ResultSet) oder
- eine Exception
Skript-Bausteine
Scripte können enthalten:
- Funktionen
Mit beliebigem Inhalt, auch rekursives Aufrufen erlaubt - Variablen
Global und lokal, der Typ wird vom zugewiesenen Wert bestimmt - Anweisungen
Schleifen, Bedingungen, Zuweisungen, Funktionsaufrufe, Script-Aufrufe
Die Syntax wird beim Erzeugen geprüft, der Inhalt erst bei Ausführung.
Beispiel: Anzahl Zeilen aller Tabellen im aktuellen Schema
-
- create script TABLE_SIZES() returns table as
- tmp1 = query( [[select table_name
- from cat
- order by 1]] )
- res = {}
- for i=1, #tmp1 do
- ok,tmp2 = pquery( [[select count(*)
- from ::TABLE]],
- { TABLE=quote(tmp1[i].TABLE_NAME) } )
- if ok then
- res[i] = { tmp1[i][1], tmp2[1][1] }
- else
- res[i] = { tmp1[i][1], nil }
- end
- end
- return res, "table_name varchar(40), nr_of_rows integer"
- /















