【PL/SQL】%ROWCOUNTを使用し行毎に処理分岐させる
カーソルをループ処理している時に、各行毎に行いたい処理があったりしないでしょうか?
その様な時に使える「%ROWCOUNT」の話です。
処理行番号を取得する「%ROWCOUNT」
「カーソル名%ROWCOUNT」で処理している行番号が取得できます。
この「%ROWCOUNT」はFETCH(行を読み込む)するたびにインクリメント(+1)されます。
下記は1行目と2行目、特有の処理を記述している例です。
CASE文とIF文で同じ判定をしています。
SELECT文でORDER BYを指定しているので「SHNCD」昇順の1行目、2行目・・・となります。
DECLARE
wkMSG VARCHAR2(500);
CURSOR csrTEST IS
SELECT *
FROM TESTTBL
ORDER BY SHNCD;
DB_TEST csrTEST%ROWTYPE;
BEGIN
OPEN csrTEST;
LOOP
FETCH csrTEST INTO DB_TEST;
EXIT WHEN csrTEST%NOTFOUND;
--CASE文でコーディング
CASE csTEST%ROWCOUNT --FETCHされるたびにインクリメント(+1)されます
WHEN 1 THEN
wkMSG := '1行目の処理です';
WHEN 2 THEN
wkMSG := '2行目の処理です';
ELSE
NULL; --CASE文は該当がないとエラーが発生するのでELSEを記述している
END CASE;
--IF文でコーディング
IF csTEST%ROWCOUNT = 1 THEN
wkMSG := '1行目の処理です';
ELSIF csTEST%ROWCOUNT = 2 THEN
wkMSG := '2行目の処理です';
END IF;
END LOOP;
CLOSE csrTEST;
END;