SQLJ ステートメントの構文

SQLJ ファイルの中で、SQLJ ステートメントを Java™ ステートメントと混在させることができます。

Java の組み込み SQL ステートメント

SQLJ の静的 SQL ステートメントは、SQLJ 文節の中で使用されます。SQLJ 変換プログラムは、SQLJ 文節がトークン #sql で始まりセミコロンで終わることにより SQLJ 文節を認識します。

最も単純な SQLJ 文節は、トークン #sql の直後に SQL ステートメントを中括弧で囲んだものからなる実行可能文節です。 たとえば、次の SQLJ 文節は、文法上 Java ステートメントを使用できる場所であれば、どこにでも使用できます。 この SQLJ 文節の目的は、MYTABLE テーブル内のすべての行を削除することです。

   #sql { DELETE FROM MYTABLE };

Java 内のホスト変数

組み込み 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}

SQL トークン

SQLJ 実行可能文節で、中括弧の内側に表示されるトークンは SQL トークンです。ただし、Java 変数に対応するホスト変数は除きます。 ホスト変数はコロン文字 (:) が先頭に置かれます。 SQL トークンは、SQLJ 実行可能文節の中括弧の外側では使えません。

たとえば、次の Java メソッドは、このメソッドの引数の値を SQL テーブルに挿入します。 メソッド本文は、次のように、ホスト変数の xy、および 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 値を表しています。


フィードバック