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 | Datentyp der | Wert des | |
Statische SQL | ja | ja | durch Benutzervariablen | |
Dynamische SQL: | EXECUTE IMMEDIATE | keine Parameter | ||
PREPARE | ja | ja | Platzhalter als | |
PREPARE | 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.