【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;

【PL/SQL】メニュー

サイトマップ