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