バージョンごとのドキュメント一覧

EXECUTE IMMEDIATE

EXECUTE IMMEDIATE <refpurpose>dynamically prepare and execute a statement</refpurpose> — SQL文を動的にプリペアし、実行します。

概要

EXECUTE IMMEDIATE string

説明

<title>Description</title>

<command>EXECUTE IMMEDIATE</command> immediately prepares and executes a dynamically specified SQL statement, without retrieving result rows. EXECUTE IMMEDIATEは動的に指定されたSQL文を、結果行を受け取ることなく、即座にプリペアし実行します。

パラメータ

<title>Parameters</title>
string #

A literal string or a host variable containing the SQL statement to be executed. 文字列リテラル、または実行するSQL文を含むホスト変数です。

注釈

<title>Notes</title>

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の規則に従って扱われます。ですが、\"はリテラルの終了とみなされますので、すぐに文法エラーを引き起こします。

<title>Examples</title>

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

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

互換性

<title>Compatibility</title>

<command>EXECUTE IMMEDIATE</command> is specified in the SQL standard. EXECUTE IMMEDIATEは標準SQLで規定されています。