カーソルは DBMS サーバーに保存されるデータベース クエリであり、SELECT ステートメントではなく、ステートメントによって取得される結果セットです。カーソルが保存されると、アプリケーションは必要に応じてカーソル内のデータをスクロールまたは参照できます。
カーソルの使用
カーソルを使用する手順:
カーソルを使用する前に、カーソルを宣言 (定義) する必要があります。このプロシージャは実際にデータを取得するのではなく、使用する SELECT ステートメントとカーソル オプションを定義するだけです。
宣言したら、使用するにはカーソルを開く必要があります。このプロセスでは、前に定義した SELECT ステートメントを使用して、実際にデータを取得します。
データが入力されたカーソルの場合は、必要に応じて行をフェッチ (取得) します。
カーソルの使用を終了するときは、カーソルを閉じ、可能であればカーソルを解放する必要があります (特定の DBMS によって異なります)。
カーソルを宣言した後は、必要に応じて何度でも開いたり閉じたりできます。カーソルが開いている間は、フェッチ操作を必要なだけ頻繁に実行できます。
カーソルを作成します
SQL Server で DECLARE を使用してカーソルに名前を付け、必要に応じて WHERE およびその他の句を使用して対応する SELECT ステートメントを定義します。 例は次のとおりです。
コードは次のとおりです。
DECLARE CustCursor CURSOR FOR SELECT * FROM Customers WHERE cust_email IS NULL
を使用します。カーソル
OPEN CURSOR ステートメントを使用するカーソルを開き、FETCH ステートメントを使用してカーソル データにアクセスします。 FETCH は、取得する行、取得する場所、およびそれらを (変数名として) 配置する場所を示します。 SQL Server でのカーソルの使用例は次のとおりです。
コードは次のとおりです。
DECLARE @cust_id CHAR(10), @cust_name CHAR(50), @cust_address CHAR(50), @cust_city CHAR(50), @cust_state CHAR(5), @cust_zip CHAR(10), @cust_country CHAR(50), @cust_contact CHAR(50), @cust_email CHAR(255) OPEN CustCursor FETCH NEXT FROM CustCursor INTO @cust_id, @cust_name, @cust_address, @cust_city, @cust_state, @cust_zip, @cust_country, @cust_contact, @cust_email WHILE @@FETCH_STATUS = 0 BEGIN FETCH NEXT FROM CustCursor INTO @cust_id, @cust_name, @cust_address, @cust_city, @cust_state, @cust_zip, @cust_country, @cust_contact, @cust_email ... END CLOSE CustCursor
この例では、 each 取得した列ごとに変数を宣言し、FETCH ステートメントで行を取得し、値をこれらの変数に保存します。 WHILE ループを使用して各行を処理します。 WHILE @@FETCH_STATUS = 0 の条件は、これ以上行をフェッチできなくなると処理を終了します (ループを終了します)。この例では特定の処理を実行しません。実際のコードでは、... プレースホルダーを特定の処理コードに置き換える必要があります。
カーソルを閉じる
SQL Server でカーソルを閉じます:
コードは次のとおりです:
CLOSE CustCursor DEALLOCATE CURSOR CustCursor
CLOSE ステートメントは、カーソルを閉じるために使用されます。一度カーソルを閉じると、再度開かないと使用できません。 2回目に使うときは改めて宣言する必要はなく、OPENで開くだけです。