PREPARE — 実行のためにSQL文をプリペアします。
PREPAREprepared_name
FROMstring
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で規定されています。