EXECUTE IMMEDIATE — SQL文を動的にプリペアし、実行します。
EXECUTE IMMEDIATE string
EXECUTE IMMEDIATE
は動的に指定されたSQL文を、結果行を受け取ることなく、即座にプリペアし実行します。
string
#文字列リテラル、または実行するSQL文を含むホスト変数です。
典型的な使い方では、string
は動的に構成されたSQL文を含む文字列へのホスト変数参照です。
リテラル文字列の場合はあまり有用ではありません。EXECUTE IMMEDIATE
を余計にタイプせずに、単にSQL文を直接書くこともできるからです。
どうしてもリテラル文字列を使う場合には、SQL文に含める二重引用符は、通常のCのイディオムである\"
ではなく、8進エスケープ(\042
)として書かなければならないことを心に留めておいてください。
これは文字列がEXEC SQL
内にあるからで、そのためECPG字句解析器はCの規則ではなくSQLの規則に従って解析します。
埋め込まれたバックスラッシュは後でCの規則に従って扱われます。ですが、\"
はリテラルの終了とみなされますので、すぐに文法エラーを引き起こします。
以下に、EXECUTE IMMEDIATE
とcommand
ホスト変数を使用してINSERT
を実行する例を示します。
sprintf(command, "INSERT INTO test (name, amount, letter) VALUES ('db: ''r1''', 1, 'f')"); EXEC SQL EXECUTE IMMEDIATE :command;
EXECUTE IMMEDIATE
は標準SQLで規定されています。