指定した 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 を指定すると、OpenESQL が n を使用してカーソルの PREFETCH 指令の設定をオーバーライドします。これにより、個々のカーソルで事前取り込みを最適化できます。