連載
» 2008年01月21日 00時00分 UPDATE

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

[石橋潤一,株式会社システムインテグレータ]

ループ処理によるFETCH文の実行

 FETCH文による順次データ取り出しを行うためには、ループ処理によってFETCH文を続けて実行する必要があります。ループ処理とは、特定の条件を判断しながら、特定の処理を繰り返すことを指します。カーソルを利用したループ処理の場合、SELECT文によって取得される結果セットの行が終了していないか、という条件の下にループ処理を実行します。例えば、SELECT文によって100行分のデータが取り出される場合、結果セットの行をすべて処理するためには100回ループを回す必要があります。ループ処理は次のような構文となります。

WHILE [条件式]

BEGIN

    [処理内容]

END


 WHILE文を利用したループ処理では、条件式が満たされる間指定された処理内容が実行されます。FETCH文をループ処理で利用する場合、取り出す対象の結果セットが終了していないか、という条件式があります。このような条件式では「@@FETCH_STATUS」というグローバルシステム変数を利用します。@@FETCH_STATUSには、最後に実行されたFETCH文の状態を返します。返される値は次のような内容です。

戻り値 説明
0 FETCH文は正常に実行された
1 FETCH文が失敗したか、行が結果セットに収まっていない
2 行を取り出せていない
表1 @@FETCH_STATUSの戻り値

 @@FETCH_STATUSを利用し、ループ処理を行います。具体的には次のような内容となります。

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

WHILE @@FETCH_STATUS = 0

BEGIN

  [処理内容]

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

END


カーソルを閉じる

 カーソルを利用する際に、忘れてはならないのが、カーソルを閉じる処理です。また、カーソルを閉じるとともに、カーソルに割り当てられたリソースの解放を行う必要があります。構文は非常に単純な内容です。

CLOSE カーソル名

DEALLOCATE カーソル名


 「CLOSE」句、「DEALLOCATE」句の後に対象のカーソル名を指定します。ループ処理とFETCH文の組み合わせによって、目的とするデータの処理をすべて終えたタイミングでカーソルの解放処理を行います。

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。