PREPARE ステートメントおよび EXECUTE ステートメントの使用

非 SELECT ステートメントにパラメーター・マーカーが含まれていなければ、EXECUTE IMMEDIATE ステートメントを使用して動的に実行することができます。しかし、非 SELECT ステートメントにパラメーター・マーカーが含まれている場合には、PREPARE および EXECUTE ステートメントを使用して実行する必要があります。

PREPARE ステートメントは非 SELECT ステートメント (例えば、DELETE ステートメント) を作成し、ユーザーが選択したステートメント名を提供します。 CRTSQLxxx コマンドで DLYPRP (*YES) の指定があるときは、PREPARE ステートメントで USING 文節の指定がある場合以外は、ステートメントが初めて EXECUTE または DESCRIBE ステートメントの中で使用されるときまでは準備は行われません。 準備の終わったステートメントは、同じプログラムの中でパラメーター・マーカーに種々の値を与えて何回でも実行することができます。 次の例では、準備の終わったステートメントが複数回にわたって実行できます。

  DSTRING = 'DELETE FROM CORPDATA.EMPLOYEE WHERE EMPNO = ?';
 
  /* ? はパラメーター・マーカーであり、この値が
    ステートメントを実行するたびに代入される
    ホスト変数であることを示しています。*/
 
  EXEC SQL PREPARE S1 FROM :DSTRING;
 
  /*DSTRING は、PREPARE ステートメントで S1 の名前を付ける
    削除ステートメントです。*/
 
   DO UNTIL (EMP =0);
  /*アプリケーション・プログラムは、表示装置から EMP の値を
    読み取ります。*/
     EXEC SQL
       EXECUTE S1 USING :EMP;
 
 
  END;

上記の例のようなルーチンでは、ユーザーはパラメーター・マーカーの数とそのデータ・タイプを知っていなければなりません。 これは、入力データを提供するホスト変数はプログラムの作成時に宣言されるからです。

注: アプリケーション・サーバーに対応する準備されたすべてのステートメントは、アプリケーション・サーバーへの接続が終るたびに消滅します。 接続は、CONNECT (タイプ 1) ステートメント、DISCONNECT ステートメント、または正常な COMMIT が後続する RELEASE により終了します。