指定した SELECT 文にカーソル名が関連付けられて、FETCH 文を使用してデータ行を取得できるようになります。
構文、形式 1:
>>--EXEC SQL---.------------.------DECLARE cursor_name------>
+-AT db_name-+
>--.-------------.-----.---------.------.--------------.--->
+-SENSITIVE---+ +-FORWARD-+ +-LOCK---------+
+-INSENSITIVE-+ +-KEYSET--+ +-LOCKCC-------+
+-DYNAMIC-+ +-OPTIMISTIC---+
+-STATIC--+ +-OPTCC--------+
+-SCROLL--+ +-OPTCCVAL-----+
+-DATASET-+ +-READ ONLY----+
+-READONLY-----+
+-FASTFORWARD--+
+-FAST FORWARD-+
>--CURSOR-------.----------------.---------FOR------------->
+----WITH HOLD---+
>----.----select_stmt-----------------------.-------------->
+----stored_procedure_call_statement---+
+----prepared_stmt_name----------------+
+----OPTIMIZE FOR n ROWS---------------+
>--.-------------------------------.----------------------->
+-FOR READ ONLY-----------------+
+-FOR UPDATE-.----------------.-+
+-OF column_list-+
>------END-EXEC--------><
構文、形式 2:
注: 書き方 2 は、SQL Server でのみ対応しています。
>>--EXEC SQL---.------------.------DECLARE cursor_name------>
+-AT db_name-+
>--CURSOR FOR---result-set-generating-dml-statement-------->
>------END-EXEC--------><
パラメーター:
AT db_name |
DECLARE DATABASE を使用して宣言されたデータベースの名前。注: DECLARE CURSOR で AT db_name を使用する必要がある場合、カーソルを参照する後続の文の接続が現在の接続と異なっていると、カーソルに関連付けられている接続に自動的に切り替わります。これは、この文の実行中のみ有効です。
|
cursor_name |
後続の文でカーソルを識別するために使用するカーソル名。カーソル名には、ファイル名として使用できる文字を 30 字まで含められます。最初の文字は英字とします。 |
select_stmt |
任意の有効な SQL SELECT 文、または結果セットを返すストアド プロシージャの QUERY ODBC 文か CALL 文。 |
prepared_stmt_name |
準備された SQL SELECT 文または QUERY ODBC 文の名前。 |
stored_procedure_call_stmt |
結果セットを返す有効なストアド プロシージャ呼び出し。 |
n |
カーソルが開いたときにフェッチされるブロックごとの行数。n の値は 1000 未満でなければなりません。 |
column_list |
カンマで区切られた列名のリスト。 |
result-set-generating-dml-statement |
OUTPUT 句を含む SQL Server INSERT、位置決めされていない UPDATE、または DELETE 文。 |
例:
EXEC SQL DECLARE C1 CURSOR FOR
SELECT last_name, first_name FROM staff
END-EXEC
EXEC SQL DECLARE C2 CURSOR FOR
QUERY ODBC COLUMNS TABLENAME 'staff'
END-EXEC
説明:
別々にコンパイルされた 2 つのプログラムでは、同じカーソルを共有できません。特定のカーソルを参照する文はすべて、まとめてコンパイルする必要があります。
DECLARE CURSOR 文は、最初のカーソル参照よりも前にする必要があります。SELECT 文は、カーソルが開いたときに実行されます。SELECT 文には次の規則が適用されます。
OPTIMIZE FOR を指定すると、カーソルの PREFETCH 指令の設定が n を使用してオーバーライドされます。これにより、個々のカーソルで事前取り込みを最適化できます。