EXECUTE IMMEDIATE

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 IMMEDIATEcommandホスト変数を使用してINSERTを実行する例を示します。

sprintf(command, "INSERT INTO test (name, amount, letter) VALUES ('db: ''r1''', 1, 'f')");
EXEC SQL EXECUTE IMMEDIATE :command;

互換性

EXECUTE IMMEDIATEは標準SQLで規定されています。