機能
PREPARE文で準備されているSQL文を解放します。
記述形式
一般規則
DEALLOCATE PREPARE文で指定しているSQL文識別子または拡張SQL文識別子と対応する被準備文が動的SELECT文の場合、同じSQL文識別子または拡張SQL文識別子に対応するカーソルは、閉じられた状態であることが必要です。
DEALLOCATE PREPARE文を実行することにより、SQL文識別子または拡張SQL文識別子に対応する被準備文は解放されます。
拡張SQL文識別子に対応する被準備文が動的SELECT文の場合、拡張SQL文識別子に対応するALLOCATE CURSOR文で定義したカーソルも同時に解放されます。
SQL文識別子または拡張SQL文識別子と対応する被準備文が動的SELECT文の場合、SQL文識別子または拡張SQL文識別子に対応するカーソルを参照している準備可能動的DELETE文:位置づけおよび準備可能動的UPDATE文:位置づけの被準備文も同時に解放されます。
解放する被準備文の名前を指定します。
解放する被準備文を準備したPREPARE文がSQL文識別子を指定している場合は、SQL文識別子を指定します。
解放する被準備文を準備したPREPARE文が拡張SQL文識別子を指定している場合は、拡張SQL文識別子を指定し、拡張SQL文識別子の値に被準備文の名前を指定します。
拡張SQL文識別子は、文字列型の埋込み変数で指定します。拡張SQL文識別子の値に空白を含む場合は、前後の空白を取り除いた値が被準備文の名前になります。
SQL文識別子を指定した場合、SQL文識別子は、同一コンパイル単位に含まれるPREPARE文で定義されていることが必要です。
SQL文識別子と拡張SQL文識別子の値が同じでも、異なる被準備文として区別されます。
使用例
DELETE文:探索をPREPARE文で準備し、EXECUTE文で実行した後、そのSQL文識別子に対応する被準備文を解放します。なお、可変長文字型の展開規則は、“6.3 SQL埋込みCプログラム”を参照してください。
EXEC SQL BEGIN DECLARE SECTION; VARCHAR CMDAREA[100]; EXEC SQL END DECLARE SECTION; : strcpy(CMDAREA.sqlvar,"DELETE FROM S1.TBL WHERE COL1 = 39"); (1) CMDAREA.sqllen = strlen(CMDAREA.sqlvar); EXEC SQL PREPARE CMD FROM :CMDAREA; (2) EXEC SQL EXECUTE CMD; (3) EXEC SQL DEALLOCATE PREPARE CMD; (4)
(1) ホスト変数CMDAREAにDELETE文:探索を設定します。
(2) ホスト変数CMDAREAが示すSQL文をSQL文識別子CMDに対応づけます。
(3) 被準備文を実行します。
(4) SQL文識別子CMDに対応する被準備文を解放します。
拡張SQL文識別子を指定した場合の例を示します。なお、可変長文字型の展開規則は、“6.3 SQL埋込みCプログラム”を参照してください。
EXEC SQL BEGIN DECLARE SECTION; CHAR CMDVAR[4]; VARCHAR CMDAREA[100]; EXEC SQL END DECLARE SECTION; : strcpy(CMDVAR,"CMD"); (1) strcpy(CMDAREA.sqlvar,"DELETE FROM S1.TBL WHERE COL1 = 39"); (2) CMDAREA.sqllen = strlen(CMDAREA.sqlvar); EXEC SQL PREPARE :CMDVAR FROM :CMDAREA; (3) EXEC SQL EXECUTE :CMDVAR; (4) EXEC SQL DEALLOCATE PREPARE :CMDVAR; (5)
(1) ホスト変数CMDVARに被準備文の名前CMDを設定します。
(2) ホスト変数CMDAREAにDELETE文:探索を設定します。
(3) ホスト変数CMDAREAが示すSQL文を拡張SQL文識別子CMDVARの値CMDに対応づけます。
(4) 被準備文を実行します。
(5) 拡張SQL文識別子CMDVARの値CMDに対応する被準備文を解放します。