SQL 解説書

PREPARE

PREPARE ステートメントは、SQL ステートメントの動的な実行を準備するために、 アプリケーション・プログラムによって使用されます。 PREPARE ステートメントは、 ステートメント・ストリング と呼ばれる文字ストリング形式のステートメントから、 準備済みステートメント と呼ばれる実行可能な SQL ステートメントを作成します。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込む方法のみ可能です。 これは、動的に準備できない実行可能ステートメントです。

許可

ステートメントの準備時に許可検査が行われるステートメント (DML) の場合、 ステートメントの許可 ID の特権には、 PREPARE ステートメントで指定されている SQL ステートメントの実行に必要な特権が含まれていなければなりません。 ステートメントの実行時に許可検査が行われるステートメント (DDL、GRANT、および REVOKE ステートメント) の場合、 このステートメントを使用するために必要な許可は特にありません。 ただし、準備済みステートメントの実行時にその許可が検査されます。

構文

>>-PREPARE--statement-name----+------------------------+-------->
                              '-INTO--descriptor-name--'
 
>----FROM--host-variable---------------------------------------><
 

説明

statement-name
準備したいステートメントの名前を指定します。 名前として既存の準備済みのステートメントを指定した場合、 前もって準備されたそのステートメントは破棄されます。 名前として、オープン・カーソルの SELECT ステートメントである 準備済みステートメントを指定することはできません。

INTO
INTO を使用すると、PREPARE ステートメントが正常に実行された場合に、 準備済みステートメントについての情報が、 descriptor-name で指定する SQLDA に入れられます。

descriptor-name
SQLDA の名前です。 103

FROM
この後に、ステートメント・ストリングを指定します。 ステートメント・ストリングは、指定するホスト変数の値です。

host-variable
文字ストリング変数の宣言規則に従って そのプログラムで記述されているホスト変数を指定します。 これは、固定長または可変長の文字ストリング変数でなければなりません。

規則

例 1: 選択ステートメント以外のステートメントを COBOL プログラムで準備して実行します。 そのステートメントはホスト変数 HOLDER に含まれ、 ユーザーによる何らかの指示に基づいて、 プログラムはそのステートメント・ストリングをそのホスト変数に入れるものと想定します。 準備するステートメントには、パラメーター・マーカーは含まれていません。

  EXEC SQL  PREPARE STMT_NAME FROM :HOLDER  
  END-EXEC.
 
  EXEC SQL  EXECUTE STMT_NAME  
  END-EXEC.
 

例 2: 例 1 と同様に選択ステートメント以外のステートメントを準備しますが、 この例では、C プログラムにコーディングします。 また、準備するステートメントには、 いくつかのパラメーター・マーカーが含まれていると想定します。

  EXEC SQL  PREPARE STMT_NAME FROM :holder;
  EXEC SQL  EXECUTE STMT_NAME USING DESCRIPTOR :insert_da;

以下のステートメントを準備するものと想定します。

  INSERT INTO DEPT VALUES(?, ?, ?, ?)

DEPT 表の列は、以下のように定義されています。

   DEPT_NO   CHAR(3) NOT NULL, -- department number
   DEPTNAME  VARCHAR(29), -- department name
   MGRNO     CHAR(6), -- manager number
   ADMRDEPT  CHAR(3)  -- admin department number



REQTEXT

部門長が存在せず、部門 A00 に報告を行う COMPLAINTS という名前の部門番号 G01 を挿入するには、 EXECUTE ステートメントを実行する前に、構造体 INSERT_DA は上記の値を持っていなければなりません。


脚注:

103
この文節の代わりに、DESCRIBE ステートメントを使用できます。 DESCRIBE を参照してください。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]