PREPARE — 実行のためにSQL文をプリペアします。
PREPAREprepared_nameFROMstring
PREPAREは実行用に文字列として動的に指定されたSQL文をプリペアします。
これは、埋め込みプログラム内でも使用することができる、直接的なPREPARE SQL文とは異なります。
EXECUTEコマンドを使用して、どちらの種類のプリペアド文を実行することができます。
prepared_nameプリペアド問い合わせ用の識別子です。
string
リテラル文字列、または、プリペア可能なSQL文であるSELECT/INSERT/UPDATE/DELETEの1つを含むホスト変数、のいずれかです。
実行時に提供されるパラメータ値には疑問符(?)を使ってください。
典型的な使い方では、stringは動的に構成されたSQL文を含む文字列へのホスト変数参照です。
リテラル文字列の場合はあまり有用ではありません。単に直接SQL PREPARE文を書くこともできるからです。
どうしてもリテラル文字列を使う場合には、SQL文に含める二重引用符は、通常のCのイディオムである\"ではなく、8進エスケープ(\042)として書かなければならないことを心に留めておいてください。
これは文字列がEXEC SQL内にあるからで、そのためECPG字句解析器はCの規則ではなくSQLの規則に従って解析します。
埋め込まれたバックスラッシュは後でCの規則に従って扱われます。ですが、\"はリテラルの終了とみなされますので、すぐに文法エラーを引き起こします。
char *stmt = "SELECT * FROM test1 WHERE a = ? AND b = ?"; EXEC SQL ALLOCATE DESCRIPTOR outdesc; EXEC SQL PREPARE foo FROM :stmt; EXEC SQL EXECUTE foo USING SQL DESCRIPTOR indesc INTO SQL DESCRIPTOR outdesc;
PREPAREは標準SQLで規定されています。