0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【SQL】条件分岐、ループ、CASE文

Posted at

制御構造

条件分岐(IF THEN ELSE)

DECLARE
    v_score NUMBER := 85;
BEGIN
    -- 条件分岐の開始
    IF v_score >= 90 THEN
        -- v_score が 90 以上の場合の処理
        DBMS_OUTPUT.PUT_LINE('Grade: A');
    ELSIF v_score >= 80 THEN
        -- v_score が 80 以上 90 未満の場合の処理
        DBMS_OUTPUT.PUT_LINE('Grade: B');
    ELSE
        -- 上記以外の場合の処理
        DBMS_OUTPUT.PUT_LINE('Grade: C');
    END IF; -- IF ブロックの終了
END;

ループ(LOOP, WHILE LOOP, FOR LOOP)

LOOP

LOOP文は、条件が満たされるまで繰り返し処理を行うための構造です。LOOPは明示的にEXIT文で終了条件を指定するまで実行され続けます。

-- LOOP
DECLARE
    v_counter NUMBER := 1; -- ループカウンタを1に初期化
BEGIN
    LOOP
        -- v_counterが5を超えたらループを終了
        EXIT WHEN v_counter > 5;
        
        -- 現在のカウンタの値を出力
        DBMS_OUTPUT.PUT_LINE('Counter: ' || v_counter);
        
        -- カウンタを1増やす
        v_counter := v_counter + 1;
    END LOOP; -- ループの終了
END;

WHILE LOOP

WHILE LOOPは、指定された条件が真の間、繰り返し処理を行います。条件が最初に評価され、条件が満たされる限りループ内の処理が実行されます。

-- WHILE LOOP
DECLARE
    v_counter NUMBER := 1; -- ループカウンタを1に初期化
BEGIN
    -- v_counterが5以下である限り、ループを実行
    WHILE v_counter <= 5 LOOP
        -- 現在のカウンタの値を出力
        DBMS_OUTPUT.PUT_LINE('Counter: ' || v_counter);
        
        -- カウンタを1増やす
        v_counter := v_counter + 1;
    END LOOP; -- ループの終了
END;

FOR LOOP

FOR LOOPは、指定された範囲内の値に対して繰り返し処理を行います。カウンタ変数は自動的に初期化され、範囲内の各値に対してループが実行されます。

-- FOR LOOP
BEGIN
    -- iが1から5までの値を取りながらループを実行
    FOR i IN 1..5 LOOP
        -- 現在のカウンタの値を出力
        DBMS_OUTPUT.PUT_LINE('Counter: ' || i);
    END LOOP; -- ループの終了
END;

CASE文

CASE文は、条件分岐の一種で、指定された式の値に基づいて異なる処理を行います。各条件が評価され、最初に真と評価された条件に対応する処理が実行されます。

-- CASE文
DECLARE
    v_grade CHAR(1) := 'B'; -- グレードを'B'に初期化
BEGIN
    -- グレードに基づいて処理を分岐
    CASE v_grade
        WHEN 'A' THEN 
            DBMS_OUTPUT.PUT_LINE('Excellent'); -- グレードが'A'の場合の処理
        WHEN 'B' THEN 
            DBMS_OUTPUT.PUT_LINE('Good'); -- グレードが'B'の場合の処理
        WHEN 'C' THEN 
            DBMS_OUTPUT.PUT_LINE('Average'); -- グレードが'C'の場合の処理
        ELSE 
            DBMS_OUTPUT.PUT_LINE('Poor'); -- それ以外の場合の処理
    END CASE; -- CASE文の終了
END;

ベストプラクティス

  • 条件分岐やループは必要最低限に。
  • 複雑な条件やループのネストを避ける。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?