【MySQL】カーソル処理の基本

スポンサーリンク

カーソルとは、SELECTで取得した結果に対して、1行ずつ処理をする機能です。

SQLは複数レコードをまとめて処理することが得意なのに対し、1行ずつ処理をするのが苦手な言語なのです。(セット指向と言います)

そこで登場するものがCURSOR(カーソル)です。

例えば、SELECT結果に対して、IF文で複数分岐処理を行う際にとても便利です。

yasu
yasu

この記事ではカーソルの基本を書いています。

次回はプロシージャのソースコードを例に説明します。

カーソルの使い方

カーソルの宣言

カーソルで取得するSELECTを定義します。

DECLARE カーソル名 CURSOR FOR SELECT命令;

カーソルを開く

カーソルを定義しただけでは、まだSELECTはまだ実行されていません。

カーソルを開き、SELECTを実行・レコードセットを取得します。

OPEN カーソル名;

レコードを取得

開いたカーソルからレコードを取得します。

変数名に1レコードずつ値を代入します。

FETCH カーソル名 INTO 変数名;

カーソルのレコードを読み切った際の処理を定義

カーソルの内容を読み込む場合、終了条件を定義しておく必要があります。

終了条件を定義しておかないと、ポインタが最終行に到達し、次の行が読み込めなくなり例外処理(NOT FOUND)が発生してしまいます。

DECLARE 処理の種類 HANDLER FOR 例外の種類 処理;

処理の種類には次の処理を継続する「CONTINUE」と、直ちに終了する「EXIT」を指定できます。

 

例文は以下になります。

DECLARE CONTINUE HANDLER FOR NOT FOUND CURSOR_EXIT_FLAG = TRUE;

NOT FOUNDが発生すると、CURSOR_EXIT_FLAGをTRUEにします。

FETCH処理中にループを抜けるために利用します。

カーソルを閉じる

カーソルを閉じましょう。開いたまま(OPEN)だとメモリリークの原因になります。

CLOSE カーソル名;

 

カーソル、フェッチのイメージ

雑なイメージですがこんな感じです。

タイトルとURLをコピーしました