EXECUTE IMMEDIATE <refpurpose>dynamically prepare and execute a statement</refpurpose> — SQL文を動的にプリペアし、実行します。
EXECUTE IMMEDIATE string
<command>EXECUTE IMMEDIATE</command> immediately prepares and
executes a dynamically specified SQL statement, without
retrieving result rows.
EXECUTE IMMEDIATE
は動的に指定されたSQL文を、結果行を受け取ることなく、即座にプリペアし実行します。
string
#A literal string or a host variable containing the SQL statement to be executed. 文字列リテラル、または実行するSQL文を含むホスト変数です。
In typical usage, the <replaceable>string</replaceable> is a host
variable reference to a string containing a dynamically-constructed
SQL statement. The case of a literal string is not very useful;
you might as well just write the SQL statement directly, without
the extra typing of <command>EXECUTE IMMEDIATE</command>.
典型的な使い方では、string
は動的に構成されたSQL文を含む文字列へのホスト変数参照です。
リテラル文字列の場合はあまり有用ではありません。EXECUTE IMMEDIATE
を余計にタイプせずに、単にSQL文を直接書くこともできるからです。
If you do use a literal string, keep in mind that any double quotes
you might wish to include in the SQL statement must be written as
octal escapes (<literal>\042</literal>) not the usual C
idiom <literal>\"</literal>. This is because the string is inside
an <literal>EXEC SQL</literal> section, so the ECPG lexer parses it
according to SQL rules not C rules. Any embedded backslashes will
later be handled according to C rules; but <literal>\"</literal>
causes an immediate syntax error because it is seen as ending the
literal.
どうしてもリテラル文字列を使う場合には、SQL文に含める二重引用符は、通常のCのイディオムである\"
ではなく、8進エスケープ(\042
)として書かなければならないことを心に留めておいてください。
これは文字列がEXEC SQL
内にあるからで、そのためECPG字句解析器はCの規則ではなくSQLの規則に従って解析します。
埋め込まれたバックスラッシュは後でCの規則に従って扱われます。ですが、\"
はリテラルの終了とみなされますので、すぐに文法エラーを引き起こします。
Here is an example that executes an <command>INSERT</command>
statement using <command>EXECUTE IMMEDIATE</command> and a host
variable named <varname>command</varname>:
以下に、EXECUTE IMMEDIATE
とcommand
ホスト変数を使用してINSERT
を実行する例を示します。
sprintf(command, "INSERT INTO test (name, amount, letter) VALUES ('db: ''r1''', 1, 'f')"); EXEC SQL EXECUTE IMMEDIATE :command;
<command>EXECUTE IMMEDIATE</command> is specified in the SQL standard.
EXECUTE IMMEDIATE
は標準SQLで規定されています。