ここではPL/SQLの制御文について紹介します。

IF文

IF文は、条件に応じて処理を実行します。

構文

IF {条件1} THEN
    {条件1}がTRUEの場合の処理
ELSEIF {条件2} THEN
    {条件2]がTRUEの場合の処理
ELSE
    条件がFALSEの場合の処理
END IF
;


以下はIF文のサンプルです。

CREATE OR REPLACE PROCEDURE PROC_SAMPLE
IS
    w_EMPNO emp.emp_no%TYPE := '001';
    w_SEX emp.emp_sex%TYPE;

BEGIN
    SELECT emp_sex INTO w_SEX FROM emp
    WHERE emp_no = w_EMPNO;
    
    IF w_SEX = '1'
    THEN
        DBMS_OUTPUT.PUT_LINE('男');
    ELSIF w_SEX = '2'
    THEN
        DBMS_OUTPUT.PUT_LINE('女');
    ELSE
        DBMS_OUTPUT.PUT_LINE('不明');
    END IF;
  
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Error');
END;
/


CASE文

CASE文は、一連の条件を基に対応する処理を実行します。

構文

CASE {値}
  WHEN {比較値1}
      {値} が {比較値1} と一致した場合の処理
  WHEN {比較値2]
      {値} が {比較値2} と一致した場合の処理
  ELSE
      {値} が比較値と一致しない場合の処理
END CASE
;


以下はCASE文のサンプルです。

CREATE OR REPLACE PROCEDURE PROC_SAMPLE
IS
    w_EMPNO emp.emp_no%TYPE := '001';
    w_SEX emp.emp_sex%TYPE;

BEGIN
    SELECT emp_sex INTO w_SEX FROM emp
    WHERE emp_no = w_EMPNO;
    
    CASE w_SEX
        WHEN '1' THEN
            DBMS_OUTPUT.PUT_LINE('男');
        WHEN '2' THEN
            DBMS_OUTPUT.PUT_LINE('女');
        ELSE
            DBMS_OUTPUT.PUT_LINE('不明');
    END CASE;
  
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Error');
END;
/


FOR LOOP文

FOR LOOP文は、指定した回数になるまで処理を実行します。

構文

FOR {カウンタ変数} IN {最小値}..{最大値} LOOP
    繰り返し処理
END LOOP;
;


以下はFOR文のサンプルです。

CREATE OR REPLACE PROCEDURE PROC_SAMPLE
IS

BEGIN
    FOR i IN 1..10 LOOP
        DBMS_OUTPUT.PUT_LINE('カウント' || i);
    END LOOP;
  
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Error');
END;
/


WHILE LOOP文

WHILE LOOP文は、条件がTRUEの場合に処理を実行します。

構文

WHILE {繰り返し条件} LOOP
    繰り返し処理
END LOOP;
;


以下はWHILE文のサンプルです。

CREATE OR REPLACE PROCEDURE PROC_SAMPLE
IS
    w_COUNT NUMBER(3);

BEGIN
    w_COUNT := 1;

    WHILE w_COUNT < 10 LOOP
        DBMS_OUTPUT.PUT_LINE('カウント' || w_COUNT);
        w_COUNT := w_COUNT + 1;
    END LOOP;
  
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Error');
END;
/


EXIT文

EXIT文は、ループの反復処理を終了します。

以下はEXIT文のサンプルです。

CREATE OR REPLACE PROCEDURE PROC_SAMPLE
IS
    w_COUNT NUMBER(3);

BEGIN
    w_COUNT := 1;

    WHILE w_COUNT < 10 LOOP
        -- カウンタが3になったらループを抜ける
        IF w_COUNT = 3
        THEN
            EXIT;
        END IF;

        DBMS_OUTPUT.PUT_LINE('カウント' || w_COUNT);
        w_COUNT := w_COUNT + 1;
    END LOOP;
  
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Error');
END;
/


CONTINUE文

CONTINUE文は、ループの反復処理をスキップします。

以下はCONTINUE文のサンプルです。

CREATE OR REPLACE PROCEDURE PROC_SAMPLE
IS

BEGIN
    FOR i IN 1..10 LOOP
        -- カウンタが3の場合は処理をスキップする
        IF i = 3
        THEN
            CONTINUE;
        ELSE
            DBMS_OUTPUT.PUT_LINE('カウント' || i);
        END IF;
    END LOOP;
  
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Error');
END;
/


以上、PL/SQLの制御文ついて解説しました。