【PL/SQL】Oracle PL/SQL入門【第7回 処理分岐してみよう】

2021年2月5日

PL/SQL入門 処理分岐を書いてみよう

前回で、「実行部」/「例外処理部」のコーディングをしました。
今回は、「宣言部」のコーディングをすると共に、処理分岐をしてみましょう。
と言う内容の第7回目です。

STEP1. ループそして処理分岐

さっそく、テキストエディタでPL/SQLをコーディングしてみます。
下記の内容をエディタで記述しテキストとして保存して下さい。
ここでは、「7.sql」ファイルとして保存しました。
ソースをコンパイル ⇒ 実行してみましょう。

CREATE OR REPLACE PROCEDURE TEST7 IS
    I NUMBER := 11;
    VTNK NUMBER;
BEGIN
    WHILE I <= 15
    LOOP
        IF I = 11 THEN
            VTNK := 10;
        ELSIF I = 12 THEN
            VTNK := 100;
        ELSIF I = 13 THEN
            VTNK := 1000;
        ELSE
            IF I = 14 THEN
                VTNK := 10000;
            ELSE
                VTNK := 1;
            END IF;
        END IF;
        INSERT INTO TBL_TEST VALUES(I, 'TEST' || TO_CHAR(I), I * VTNK);
        I := I + 1;
    END LOOP;
    COMMIT;
EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
        RAISE;
END;
/
show errors

STEP2. 実行結果を見てみよう

上記の実行結果を、「Oracle SQL Developer」で確認してみましょう。
「ID」項目の値が、1~15の行を見て下さい。
設定されている「TNK」項目の値が、ループ変数の100倍ではなくなっています。
処理分岐で何倍にするかを変更した為です。

STEP3. ソースの説明

CREATE OR REPLACE PROCEDURE TEST7 IS
    I NUMBER := 11;
    VTNK NUMBER;
BEGIN
    WHILE I <= 15
    LOOP
        IF I = 11 THEN
            VTNK := 10;
        ELSIF I = 12 THEN
            VTNK := 100;
        ELSIF I = 13 THEN
            VTNK := 1000;
        ELSE
            IF I = 14 THEN
                VTNK := 10000;
            ELSE
                VTNK := 1;
            END IF;
        END IF;
        INSERT INTO TBL_TEST VALUES(I, 'TEST' || TO_CHAR(I), I * VTNK);
        I := I + 1;
    END LOOP;
    COMMIT;
EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
        RAISE;
END;
/
show errors

■2行目: I NUMBER := 11;
初の宣言部の記述です。
「I」と言う変数名で、変数の型はNUMBER型、初期値として「11」を設定しています。

■3行目: VTNK NUMBER;
「VTNK」と言う変数名で、変数の型はNUMBER型で変数を宣言しています。

■5、6、22行目
WHILE I <= 15
LOOP
END LOOP;
「FOR」文とは違うループ方法です。「FOR」文と違いループ変数の宣言、変更を自前で行います。
今回は、「I」変数の値が15以下の間、ループします。

■7行目: IF I = 11 THEN
初の「IF」文です。
「I」変数の値が11の場合に、8行目の「VTNK := 10;」
変数「VTNK」に10を代入する処理を実行します。

■9行目:ELSIF I = 12 THEN
ELSE と IF が合体すると「ELSIF」となります。「E」が省略されます。
7行目の処理と繋げて考えると、
「I」が11以外の場合に9行目の判定を行うと言う意味になります。

■11~19行目 省略です

■20行目: INSERT INTO TBL_TEST VALUES(I, 'TEST’ || TO_CHAR(I), I * VTNK);
テーブルの「TNK」項目に設定する値を、「I * VTNK」としています。
変数「VTNK」は上記のIF分岐で設定した値です。

■21行目: I := I + 1;
ループカウンタ変数を自前でインクリメントします。この行が無いと無限ループします。

あとがき

変数宣言、WHILE文、IF文、どうだったでしょうか?
今までの回と違い、多少盛沢山だった思います。
次回はSQLの基本、「SELECT」文を見て行こうと思います。
※PL/SQLだと「INSERT」より「SELECT」の方が難しいです

記事を読む Oracle PL/SQL入門【第8回 SELECT文】

【PL/SQL】メニュー

サイトマップ

2021年2月5日Oracle,PL/SQL,データベース,プログラムPL/SQL入門

Posted by こっぷ