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

PREPARE

PREPARE <refpurpose>prepare a statement for execution</refpurpose> — 実行のためにSQL文をプリペアします。

概要

PREPARE prepared_name FROM string

説明

<title>Description</title>

<command>PREPARE</command> prepares a statement dynamically specified as a string for execution. This is different from the direct SQL statement <xref linkend="sql-prepare"/>, which can also be used in embedded programs. The <xref linkend="sql-execute"/> command is used to execute either kind of prepared statement. PREPAREは実行用に文字列として動的に指定されたSQL文をプリペアします。 これは、埋め込みプログラム内でも使用することができる、直接的なPREPARE SQL文とは異なります。 EXECUTEコマンドを使用して、どちらの種類のプリペアド文を実行することができます。

パラメータ

<title>Parameters</title>
prepared_name #

An identifier for the prepared query. プリペアド問い合わせ用の識別子です。

string #

A literal string or a host variable containing a preparable SQL statement, one of SELECT, INSERT, UPDATE, or DELETE. Use question marks (<literal>?</literal>) for parameter values to be supplied at execution. リテラル文字列、または、プリペア可能なSQL文であるSELECT/INSERT/UPDATE/DELETEの1つを含むホスト変数、のいずれかです。 実行時に提供されるパラメータ値には疑問符(?)を使ってください。

注釈

<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 a direct SQL <command>PREPARE</command> statement. 典型的な使い方では、stringは動的に構成されたSQL文を含む文字列へのホスト変数参照です。 リテラル文字列の場合はあまり有用ではありません。単に直接SQL PREPARE文を書くこともできるからです。

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>
char *stmt = "SELECT * FROM test1 WHERE a = ? AND b = ?";

EXEC SQL ALLOCATE DESCRIPTOR outdesc;
EXEC SQL PREPARE foo FROM :stmt;

EXEC SQL EXECUTE foo USING SQL DESCRIPTOR indesc INTO SQL DESCRIPTOR outdesc;

互換性

<title>Compatibility</title>

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

関連項目

<title>See Also</title> EXECUTE