カーソルの結果セットから行が検索され、その行にある列の値が対応するホスト変数 (または SQLDA データ構造で指定されたアドレス) に書き込まれます。
 
	 構文:
 
		 
		>>--EXEC SQL--.-------------------.--------------->
              +-FOR :host_integer-+
             
 >--FETCH-------.-------------.------cursor_name-->
                +---PREVIOUS--+
                +---LAST------+
                +---PRIOR-----+
                +---FIRST-----+
                +---NEXT------+ 
 >--.-------------------------------------.------->
    +-USING DESCRIPTOR :sqlda_struct------+
    |       +--------------------------,-+|
    |       V                            ||  
    +-INTO--.-:hvar----------------------.+
            +-:hvar:ivar-----------------+
            +-:hvar-.-----------.-:ivar--+
                    +-INDICATOR-+
 >--END EXEC--><
 
	 パラメーター:
 
		 
		 
		
 
			  
			  
			  
				 
				  | host_integer | 処理されるホスト配列要素の最大数を指定するホスト変数。PIC S9(4) COMP-5 または PIC S9(9) COMP-5 として宣言する必要があります。 | 
 
				 
				  | cursor_name | 以前宣言され開いたカーソル。 | 
 
				 
				  | :sqlda_struct | 以前に DESCRIBE 文によって設定され、出力値アドレスが含まれる SQLDA データ構造体。このオプションは、準備された SELECT 文によって宣言されたカーソルと一緒に使用する場合に限り有効です。(SELECT 文は、PREPARE 文を使って準備されます。その他の埋め込み SQL 実装との互換性を保つためにコロンを使用できます。 | 
 
				 
				  | :hvar | データを受け取る 1 つまたは複数のホスト変数を指定します。 | 
				
				  | :ivar | 次のいずれかを指定します。 
						1 つ以上のホスト変数 (カンマ区切り)1 つ以上のホスト変数およびインジケーター変数の組み合わせ (カンマ区切り) | 
 
			 
 
		  
 
 
	 例:
 
		 
		* Declare a cursor for a given SQL statement.
     EXEC SQL DECLARE C1 CURSOR FOR
        SELECT last_name, first_name FROM staff
     END-EXEC
     EXEC SQL OPEN C1 END-EXEC
* Fetch the current values from the cursor into the host variables
* and if everything goes ok, display the values of the host
* variables
     PERFORM UNTIL SQLCODE NOT = ZERO
        EXEC SQL
           FETCH C1 INTO :lname,:fname
        END-EXEC
        IF SQLCODE NOT = ZERO AND SQLCODE NOT = 100
           DISPLAY 'Error: Could not perform fetch'
           DISPLAY SQLERRML
           DISPLAY SQLERRMC
           EXEC SQL DISCONNECT ALL END-EXEC
           STOP RUN
        END-IF
        DISPLAY 'First name: 'fname
        DISPLAY 'Last name : 'lname
        DISPLAY SPACES
     END-PERFORM
 
	 
説明:
デフォルトでは、FETCH 文により次の行が検索されますが、前の行、最後の行または最初の行も指定できます。これ以上取り込む行がない場合は、SQLCODE が 100、SQLSTATE が 02000 に設定されます。
OPEN cursor_name 文は FETCH 文より前にあり、カーソルは FETCH の実行中に開いておく必要があります。PREVIOUS、LAST、PRIOR、FIRST または NEXT を使用する場合は、DECLARE CURSOR 文または SET SCROLLOPTION 文および SET CONCURRENCY 文を使用して適切なカーソルオプションも設定する必要があります。さらに、ホスト変数のデータ型は、対応するデータベース列のデータ型と互換性がなければなりません。
列の数がホスト変数の数よりも少ない場合は、SQLWARN3 の値が W に設定されます。 エラーが発生した場合には、 それ以上の列は処理されません(処理済みの列は元に戻りません)。
別の方法として、:hvar 変数に、カーソル宣言文の選択リストにある列にそれぞれ対応する複数のフィールドを含む COBOL レコードを指定できます。この形式を使用する場合は、SQL コンパイラ指令の DB2 オプションを指定する必要があります(この形式を使用すると、PREPARE INTO 文と DESCRIBE 文が COBOL コンパイラによって拒否されるので注意してください)。
ANSI92ENTRY を設定して、NULL 値をフェッチした場合に、NULL 標識がなければ SQLCODE が -19425 に設定されます。ANSI92ENTRY が設定されない場合、SQLCODE は 0 になります。いずれの場合も、SQLSTATE は 22002 になり、SQLWARN2 は W になります。
INTO 句のホスト変数の 1 つが配列である場合、INTO 句のホスト変数はすべて配列にする必要があります。