検索
連載

ストアドプロシージャの花形“カーソル”を使おうさらっと覚えるSQL&T-SQL入門(11)(1/3 ページ)

アプリケーション開発でデータベースを利用する新人プログラマに向けて、SQLおよびT-SQLを短期間で理解できるよう、開発現場ですぐに必要となる内容を中心に解説する。(編集部)

PC用表示 関連情報
Share
Tweet
LINE
Hatena

主な内容

   --Page 1--
▼カーソルの概念
▼カーソルの使い方
 −カーソルの宣言
 −カーソルを開く
 −1行ごとにデータを取り出す
   --Page 2--
 −ループ処理によるFETCH文の実行
 −カーソルを閉じる
   --Page 3--
▼カーソルを利用したストアドプロシージャの作成
▼まとめ


 前々回「Transact-SQLでストアドプロシージャを作成する」、前回「IF文による条件分岐でSQLを動的に変化させる」と続けてストアドプロシージャを取り上げてきました。今回も同じくストアドプロシージャを取り上げます。題材とするのは「カーソル」です。

カーソルの概念

 SQLは複数行のデータを一括して処理することに適しています。1000行のデータを一括して取得したり、一括して更新を行うなど大量のデータに対する一括した処理を行えます。しかしながら、一括したデータ処理ではなく、1行ずつデータを読み取り、処理を行いたい場合があります。例えば処理内容が複雑で一括した処理を行えず、1行ずつ条件を判断して処理を行う必要があるような場合です。このような場合にカーソルを利用します。

 カーソルはSELECT文の実行結果(結果セット)を仮想的な作業領域として扱います。カーソルはこの作業領域に対してループ処理を実行し、1行ずつデータを取り出し、処理を行います。Visual BasicやJavaといった言語でもこのような結果セットに対する順次処理を可能としていますが、カーソルを利用することによりストアドプロシージャ内で目的の処理を完結させることが可能です。

 カーソルでは、現在の処理行を示すために「ポインタ」という概念を持っています。ポインタは現在の処理位置を値として持っています。このポインタの位置をループ処理の中で1つずつ進めることによって、1行ずつデータを取り出す、という処理が実現されています。

図1 カーソルとポインタの概念
図1 カーソルとポインタの概念

カーソルの使い方

 それでは、まずはカーソルの文法を確認していきましょう。カーソルを利用するためには次の手順が必要となります。

  1. カーソルの宣言
  2. カーソルを開く
  3. 1行ごとにデータを取り出す
  4. カーソルを閉じる

 それぞれの手順には専用の構文が用意されています。

カーソルの宣言

 カーソルの利用に当たって最初に行うことは、カーソルの宣言です。カーソルの宣言では「DECLARE CURSOR」文を利用し、処理対象の結果セットを得るためのSELECT文を定義します。構文は次のようになります。

DECLARE [カーソル名] CURSOR FOR [SELECT文]


カーソルを開く

 カーソルを利用するためには、カーソルの宣言による定義に従いカーソルを開く必要があります。カーソルを開くと、定義されたSELECT文が実行され、クエリの結果セットに対してカーソルがアクセスできるようになります。カーソルを開くには、OPEN文を利用します。

OPEN [カーソル名]


1行ごとにデータを取り出す

 続いて開いたカーソルから、1行ごとにデータを取り出します。カーソルからデータを取り出すためには、次のような作業が必要となります。

  1. 「LOOP」文または「WHILE」文を使って、ループ処理を実行する
  2. ループ処理の中で「FETCH」文を実行し、カーソルから1行取り出す
  3. 最後の行を取り出したらループ処理を終了する

 この中でメインとなる処理はFETCH文の実行によるデータの取り出しです。まずはFECTH文の構文から確認しましょう。

FETCH NEXT FROM [カーソル名] INTO [変数リスト]


 FETCH文ではデータを取り出すカーソル名と、取り出したデータを格納するための変数リストを指定します。変数リストは、SELECT文で取り出される列の数と同じである必要があります。3つの列を取り出すSELECT文をDECLARE CURSORにて宣言した場合、3つの変数を指定します。FETCH文によって取り出されたデータはこの変数リストに代入されることによって、データとして扱えるようになります。

Copyright © ITmedia, Inc. All Rights Reserved.

       | 次のページへ
ページトップに戻る