目的
動的DECLARE CURSOR文の準備をして、異なる結果セットを作成できるようにします。動的パラメータ マーカーを許可します。
呼び出し
実行可能形式。
ストアド プロシージャのみ。
構文
- statement_name
- DECLARE CURSOR文のstatement_nameと同じ識別子を指定します。
- statement_string
- 動的に実行されるSQLテキストを指定します。
- statement_string_variable
- SQLローカル変数の名前、または動的に実行されるSQLテキスト文字列を含むSQLパラメータや文字列変数を指定します。
ANSI準拠
PREPAREは、ANSI/ISO SQL:2011に準拠しています。
許可
なし。
ルール
- 構文解析プログラムは、PREPARE文の構文を検査します。構文エラーがあると、システムは構文例外を返します。
- PREPAREを動的SQL文として実行することはできません。
- この文は、動的カーソルSELECT文にする必要があります。そうしていない場合、システムは'07005' dynamic SQL error, prepared statement not a cursor specificationを返します。
- 動的SQL文のテキストは最大で64キロバイトまでの長さにすることができます(SQLテキスト、USINGデータ、およびパーセルのオーバーヘッドを含む)。
- 複文リクエストを指定することはできません。
- 動的SQL文には、パラメータ マーカーまたはプレースホルダー トークン(疑問符)を使用することができ、ここでは選択リスト以外の任意の定数(特にSQL変数)参照が有効です。
- OPEN文のUSING句は、その文に変数を提供します。
例: PREPAREの使用
CREATE PROCEDURE abc (IN data1v VARCHAR(10), IN data2v VARCHAR(10) ) DYNAMIC RESULT SETS 1 BEGIN DECLARE sql_stmt1 VARCHAR(100); DECLARE sales DECIMAL(8,2); DECLARE item INTEGER; DECLARE cstmt CURSOR WITH RETURN ONLY FOR stmt1; SET sql_stmt1 = 'SELECT T1.item, T1.sales FROM T1 WHERE' data1v || '= store_name AND ' || data2v || '= region;'; PREPARE stmt1 FROM sql_stmt1; OPEN cstmt; END;
例: パラメータ マーカーでのPREPAREの使用
この例では、パラメータ マーカーを使用するPREPARE文が記述されています。
SET sql_stmt1 = 'SELECT T1.item, T1.sales FROM T1 WHERE ?' '= store_name AND ? = region;'; PREPARE stmt1 FROM sql_stmt1; OPEN cstmt USING data1v, data2v;
関連トピック
埋め込みSQLでのPREPARE文の使用方法については、PREPAREを参照してください。