SQLJ ファイルの中で、SQLJ ステートメントを Java™ ステートメントと混在させることができます。
SQLJ の静的 SQL ステートメントは、SQLJ 文節の中で使用されます。SQLJ 変換プログラムは、SQLJ 文節がトークン #sql で始まりセミコロンで終わることにより SQLJ 文節を認識します。
最も単純な SQLJ 文節は、トークン #sql の直後に SQL ステートメントを中括弧で囲んだものからなる実行可能文節です。 たとえば、次の SQLJ 文節は、文法上 Java ステートメントを使用できる場所であれば、どこにでも使用できます。 この SQLJ 文節の目的は、MYTABLE テーブル内のすべての行を削除することです。
#sql { DELETE FROM MYTABLE };
組み込み SQL ステートメント用の引数は、ホスト変数 を通じて受け渡されます。ホスト変数は、SQL ステートメント内で使用される Java 変数です。 ホスト変数は最高 3 つのパーツに別れています。
Java ID は、SQLJ 文節を置換するために生成される Java コードの中で繰り返し使用できます。
次の照会には、ホスト変数 :x が含まれています。この変数は、この照会が属するスコープ内で可視の Java 変数、フィールド、またはパラメーター x です。
SELECT COL1, COL2 FROM TABLE1 WHERE COL3 < :x
複合 SQL の中で指定されるすべてのホスト変数は、デフォルトでは入力ホスト変数です。 ホスト変数を出力ホスト変数としてマークするためには、ホスト変数の直前にパラメーター・モード ID の OUT または INOUT を指定する必要があります。 例:
#sql {begin compound atomic static select count(*) into :OUT count1 from employee; end compound}
SQLJ 実行可能文節で、中括弧の内側に表示されるトークンは SQL トークンです。ただし、Java 変数に対応するホスト変数は除きます。 ホスト変数はコロン文字 (:) が先頭に置かれます。 SQL トークンは、SQLJ 実行可能文節の中括弧の外側では使えません。
たとえば、次の Java メソッドは、このメソッドの引数の値を SQL テーブルに挿入します。 メソッド本文は、次のように、ホスト変数の x、y、および z を含んでいる 1 つの SQLJ 実行可能文節からなっています。
void m (int x, String y, float z) throws SQLException { #sql { INSERT INTO TAB1 VALUES (:x, :y, :z) }; }
ループ内で静的 SQL ステートメントを初期設定しないでください。 それぞれの静的 SQL ステートメントごとに、1 つのステートメントが存在する必要があります。 たとえば、次のコードの断片は無効です。
for( int i=0; i<2; i++ ){ #sql [ctx] itr[i] = { SELECT id, name FROM staff }; }
上記のコードの断片を、以下のステートメントで置き換えてください。
int i=0; #sql [ctx] itr[i] = { SELECT id, name FROM staff }; i=1; #sql [ctx] itr[i] = { SELECT id, name FROM staff };
一般に、SQL トークンでは大/小文字を区別しません (二重引用符で区切られている ID は除きます)。 したがって、大文字でも小文字でも、または大/小文字混合でも記述できます。 ただし、Java トークンには大/小文字の区別があります。 SQLJ のヘルプ・トピックに示されている例では、分かりやすくするために、大/小文字を区別しない SQL トークンは大文字で記述され、Java トークンは小文字、または大/小文字混合で記述されています。 小文字の null は Java の NULL 値を表し、大文字の NULL は SQL の NULL 値を表しています。