In einer SQLJ-Datei können SQLJ-Anweisungen mit Java-Anweisungen gemischt werden.
Statische SQL-Anweisungen werden in SQLJ in SQLJ-Klauseln angegeben. Das SQLJ-Umsetzungsprogramm erkennt SQLJ-Klauseln, da sie mit dem Token #sql beginnen und mit einem Semikolon enden.
Die einfachsten SQLJ-Klauseln sind ausführbare Klauseln, die aus dem Token #sql und einer nachfolgenden SQL-Anweisung in geschweiften Klammern bestehen. Beispiel: Die folgende SQLJ-Klausel kann an jeder Stelle stehen, an der eine Java-Anweisung angegeben werden darf. Diese SQLJ-Klausel dient zum Löschen aller Zeilen in einer Tabelle mit dem Namen MYTABLE:
#sql { DELETE FROM MYTABLE };
Argumente für eingebettete SQL-Anweisungen werden über Hostvariablen übergeben. Dies sind Java-Variablen, die in der jeweiligen SQL-Anweisung enthalten sind. Hostvariablen bestehen aus bis zu drei Teilen:
Eine Java-ID kann mehrmals in dem Java-Code verwendet werden, der generiert wird, um eine SQLJ-Klausel zu ersetzen.
Die folgende Abfrage enthält die Hostvariable :x. Sie steht für die Java-Variable, das Feld oder den Parameter x innerhalb des Gültigkeitsbereichs, der die Abfrage enthält:
SELECT COL1, COL2 FROM TABLE1 WHERE COL3 < :x
Alle Hostvariablen, die in Compound-SQL-Anweisungen angegeben werden, sind standardmäßig Eingabehostvariablen. Sie müssen vor der Hostvariablen die Parametermodus-ID OUT oder INOUT angeben, um sie als Ausgabehostvariable zu markieren. Beispiel:
#sql {begin compound atomic static select count(*) into :OUT count1 from employee; end compound}
In einer ausführbaren SQLJ-Klausel sind die Token innerhalb der geschweiften Klammern SQL-Token, mit Ausnahme der Hostvariablen, die Java-Variablen entsprechen. Vor Hostvariablen muss ein Doppelpunkt (:) angegeben werden. Es gibt keine SQL-Token außerhalb der geschweiften Klammern einer ausführbaren SQLJ-Klausel.
Beispiel: Die folgende Java-Methode fügt die Werte ihrer Argumente in eine SQL-Tabelle ein. Der Methodenhauptteil besteht aus einer ausführbaren SQLJ-Klausel, die die Hostvariablen x, y und z enthält:
void m (int x, String y, float z) throws SQLException { #sql { INSERT INTO TAB1 VALUES (:x, :y, :z) }; }
Initialisieren Sie statische SQL-Anweisungen nicht in einer Schleife. Für jede statische SQL-Anweisung muss eine Anweisung vorhanden sein. Beispiel: Der folgende Codeausschnitt ist ungültig:
for( int i=0; i<2; i++ ){ #sql [ctx] itr[i] = { SELECT id, name FROM staff }; }
Ersetzen Sie den obigen Codeausschnitt durch die folgenden Anweisungen:
int i=0; #sql [ctx] itr[i] = { SELECT id, name FROM staff }; i=1; #sql [ctx] itr[i] = { SELECT id, name FROM staff };
In der Regel muss bei SQL-Token die Groß-/Kleinschreibung nicht beachtet werden (mit Ausnahme von IDs in doppelten Anführungszeichen). Sie können in Großschreibung, in Kleinschreibung oder in Groß-/Kleinschreibung eingegeben werden. Bei Java-Token muss die Groß-/Kleinschreibung jedoch beachtet werden. Zur Verdeutlichung in Beispielen der SQLJ-Hilfethemen werden SQL-Token in Großschreibung und Java-Token in Kleinschreibung oder Groß-/Kleinschreibung angegeben. Das klein geschriebene null stellt den Java-Nullwert dar, während das groß geschriebene NULL den SQL-Nullwert darstellt.