SQL-Anweisungen können Variablen der Wirtssprache, sogenannte Benutzervariablen, enthalten. Mit Benutzervariablen ist es möglich, Daten aus der Datenbank in das Programm der Wirtssprache zu übertragen und dort weiterzuverarbeiten und umgekehrt Daten in die Datenbank zu übertragen. In SQL-Anweisungen müssen alle Benutzervariablen mit einem vorangestellten Doppelpunkt gekennzeichnet sein. Benutzervariablen und Spalten können denselben Namen haben.
Benutzervariablen müssen vor ihrer Verwendung innerhalb einer DECLARE SECTION definiert werden. Eine DECLARE SECTION beginnt in ESQL-COBOL mit „EXEC SQL BEGIN DECLARE SECTION END-EXEC“ und endet mit „EXEC SQL END DECLARE SECTION END-EXEC“. Ein ESQL-Programm kann beliebig viele DECLARE SECTIONs enthalten.
DECLARE SECTIONs dürfen nur an Stellen stehen, an denen Variablendeklarationen in der Programmiersprache erlaubt sind. Wird eine Benutzervariable in einer ausführbaren SQL-Anweisung verwendet, so muss nach den Regeln der Wirtssprache eine Referenz auf die Deklaration an dieser Stelle erlaubt sein.
Bei der Definition der Benutzervariablen muss auf die Verträglichkeit von Datentypen der Wirtssprache und SQL-Datentypen geachtet werden. Auf die Datentyp-Verträglichkeit ist nicht nur bei der Übertragung von Werten in die Datenbank oder von der Datenbank zu achten, sondern auch bei der Verwendung von Benutzervariablen in Ausdrücken.
Indikatorvariablen
Indikatorvariablen sind Benutzervariablen, mit denen geprüft werden kann, ob bei der Übertragung eines alphanumerischen Werts oder eines National-Werts in eine Benutzervariable Informationsverlust aufgetreten ist und ob eine Spalte den NULL-Wert enthält. Indikatorvariablen dienen auch dazu, NULL-Werte in die Datenbank zu übertragen.
Wenn ein alphanumerischer Wert oder ein National-Wert ungekürzt in eine Benutzervariable übertragen wurde, dann hat die Indikatorvariable den Inhalt „0“. War die Länge des zu übertragenden Werts größer als die Länge der Benutzervariable, dann enthält die Indikatorvariable die tatsächliche Länge des zu übertragenden Werts.
Soll der NULL-Wert aus der Datenbank in eine Benutzervariable übertragen werden, dann erhält die Indikatorvariable den Wert „-1“ und die Benutzervariable bleibt ungeändert. Soll der NULL-Wert aus einer Benutzervariablen in die Datenbank übertragen werden, dann muss die zugehörige Indikatorvariable mit einem negativen Wert belegt werden.
Eine Indikatorvariable wird einer Benutzervariablen in einer SQL-Anweisung zugeordnet, indem die Indikatorvariable direkt hinter der Benutzervariablen, wahlweise mit dem Schlüsselwort INDICATOR versehen, angegeben wird.
Indikatorvariablen können angegeben werden
in der RETURN INTO- oder VALUES-Klausel der INSERT-Anweisung
in der VALUES-Klausel der MERGE-Anweisung
in der INTO-Klausel der SELECT- oder der FETCH-Anweisung
in der SET-Klausel von UPDATE- oder MERGE-Anweisungen
in der USING- und INTO-Klausel der EXECUTE-Anweisung
in der USING-Klausel der OPEN-Anweisung
in Ausdrücken, z.B. in DELETE- oder DECLARE CURSOR-Anweisungen.