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で規定されています。