Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Dynamische SQL

Mit den bisher erwähnten SQL-Anweisungen kann ein ESQL-Programm erstellt werden, das einmal übersetzt wird und dann beliebig oft ablaufen kann. Die Form jeder SQL-Anweisung ist zum Kompilierungszeitpunkt bekannt.

Um beispielsweise beliebige Abfragen einer Datenbank durchzuführen, könnte man versuchen, alle möglichen Abfragen in einem ESQL-Programm vorzusehen. Eine bestimmte Abfrage könnte dann vom ESQL-Programm analysiert und die zugehörige SQL-Anweisung im ESQL-Programm angesprungen werden. Ein solcher Versuch würde offensichtlich sehr bald an Grenzen stoßen. Um derartige Anwendungen durchführen zu können, sind Sprachmittel notwendig, mit denen man SQL-Anweisungen erst zur Laufzeit eines ESQL-Programms angeben kann.

Solche Anwendungen können mit Hilfe von dynamisch übersetzten, d.h. erst zur Laufzeit übersetzten SQL-Anweisungen realisiert werden. Zum Übersetzen und Ausführen von dynamisch übersetzbaren SQL-Anweisungen gibt es spezielle Anweisungen. Sie werden „Anweisungen der dynamischen SQL“ oder kurz „dynamische SQL“ genannt. Sie umfassen neben den SQL-Anweisungen der dynamischen SQL auf "SQL-Anweisungen der dynamischen SQL" noch SQL-Anweisungen für einen dynamischen, d.h. erst zur Laufzeit definierten Cursor. Im Unterschied zur dynamischen SQL werden SQL-Anweisungen, die zum Kompilierungszeitpunkt festliegen müssen, als statische SQL bezeichnet.

Die folgende Übersicht zeigt die zunehmenden Freiheitsgrade, die durch die verschiedenen Sprachmittel der dynamischen SQL erreicht werden können.

SQL-Sprachmittel

Anzahl der
Parameter zum
Übersetzungszeitpunkt
bekannt

Datentyp der
Parameter zum
Übersetzungszeitpunkt
bekannt

Wert des
Parameters

Statische SQL

ja

ja

durch Benutzervariablen
übergebbar

Dynamische SQL:

EXECUTE IMMEDIATE

keine Parameter

PREPARE
EXECUTE mit Benutzervariablen

ja

ja

Platzhalter als
Ersatz für
Eingabeparameter

PREPARE
EXECUTE mit Deskriptorbereichen

nein

nein

Tabelle 36: Zunehmende Flexibilität beim Einsatz von dynamischer SQL


Diesem Gewinn an Flexibilität steht ein erhöhter Aufwand für die Anwendungsprogrammierung bei Anwendungen mit dynamischer SQL gegenüber.

Der am weitesten reichende Mechanismus, mit dem Ein- und Ausgabeparameter von dynamisch übersetzten SQL-Anweisungen gesetzt und gelesen werden können, ist der SQL-Deskriptorbereich. Ein SQL-Deskriptorbereich dient als Schnittstelle zwischen dem Anwenderprogramm und der Datenbank für Eingabeparameter oder Ausgabeparameter. SQL-Anweisungen, die erst zur Laufzeit eines ESQL-Programms eingegeben werden, können variable Eingabeparameter enthalten, die im SQL-Deskriptorbereich abgelegt und dort abgefragt werden können. Es können ebenfalls Ergebnisse von Abfragen der Datenbank im SQL-Deskriptorbereich abgelegt und Informationen über Anzahl, Name, Datentyp, Werte usw. der Ergebnisspalten von dort gelesen und im ESQL-Programm berücksichtigt werden. Beispielsweise können mit Hilfe von Deskriptorbereichen Ergebnisse von beliebigen Abfragen der Datenbank im ESQL-Programm aufbereitet werden.