Oracle SQLブランチコマンド


> ## 2. ブランチコマンド

  • IF文CASE WHEN-THEN文の提供

    1)IF文


    開発言語のIF文と同じ機能を提供
  • (書式-1を使用)--最も簡単
    IF条件文1 THEN
    命令文
    [ELSE
    命令文2;]
    END IF;
    (フォーマット-2を使用)--一般
    IF条件文1 THEN
    命令文
    ELSIF条件文2 THEN
    命令文
    :
    ELSE
    命令文
    END IF;
    (フォーマット-3を使用)--ネストIF
    IF条件文1 THEN
    IF条件文2 THEN
    命令文
    ELSE
    命令文
    END IF;
    ELSE
    命令文
    END IF;
    使用例)年を入力し、閏年と平年を区別する匿名ブロックを作成します.
    うるう年はその年の4倍で100倍ではありません.
    四百年
        ACCEPT P_YEAR PROMPT '년도 : '
        DECLARE
          V_YEAR NUMBER:=TO_NUMBER('&P_YEAR');
          V_MESSAGE VARCHAR2(100);
        BEGIN
          IF (MOD(V_YEAR,4)=0 AND MOD(V_YEAR,100)!=0) OR
             (MOD(V_YEAR,400)=0) THEN
             V_MESSAGE:=V_YEAR||'년은 윤년';
          ELSE   
             V_MESSAGE:=V_YEAR||'년은 평년';
          END IF;
          
          DBMS_OUTPUT.PUT_LINE(V_MESSAGE);
        END;
      
    使用例)忠清南道に居住する会員を抽出し、当該会員の2005年4~6月の購入統計後、
    購入金額合計100万以上であれば、「vip会員」
    50万~100万:「通常会員」
    以下「劣等会員」を印刷してください
       DECLARE
         CURSOR CUR_ADD IS --SELECT 문의 커서는 뷰와 같음
           SELECT MEM_ID
             FROM MEMBER
            WHERE MEM_ADD1 LIKE '충남%'; --거주지 충남인 회원
            V_SUM NUMBER:=0;
            V_MESAAGE VARCHAR2(50);
       BEGIN
         FOR REC IN CUR_ADD LOOP
             SELECT SUM(CART_QTY*PROD_PRICE) INTO V_SUM
               FROM CART, PROD
              WHERE CART_PROD=PROD_ID
                AND SUBSTR(CART_NO,1,6) BETWEEN '200504' AND '200506'
                AND CART_MEMBER=REC.MEM_ID;
             IF V_SUM>=1000000 THEN 
                V_MESSAGE:=REC.MEM_NAME||'회원은 VIP회원입니다';
            ELSIF V_SUM>=500000 THEN
               V_MESSAGE:=REC.MEM_NAME||'회원은 정상회원입니다';
            ELSE
                V_MESSAGE:=REC.MEM_NAME||'회원은 관심회원입니다';
            END IF;
            
            DBMS_OUTPUT.PUT_LINE(V_MESSAGE);
         
         END LOOP;
       END;
       
       

    2)CASE WHEN~THEN文

  • 第4四半期の記事
  • Javaと同様のSWITCH CASE文
  • (書式-1を使用)
    CASE変数
    WHEN値1 THEN
    コマンド1;
    WHEN値2 THEN
    コマンド2
    :
    ELSE
    コマンドn
    END CASE;
    (フォーマット-2を使用)
    CASE WHEN条件1 THEN
    コマンド1;
    WHEN値2 THEN
    コマンド2
    :
    ELSE
    コマンドn
    END CASE;
    使用例)「非常に優秀」、「優秀」、「一般」、「不足」、「非常に不足」のスコアを入力します.
    「非常に優秀」は90以上
    「優秀」は80以上
    「普通」が70以上
    60未満
    「非常に不足している」
                DECLARE
       V_SCORE NUMBER:=88;
       V_GRADE VARCHAR2(50);
       BEGIN
        CASE TRUNC(V_SCORE/10)
         WHEN 10 THEN
              V_GRADE:='매우 우수';
               WHEN 9 THEN
              V_GRADE:=' 매우 우수';
               WHEN 8 THEN
              V_GRADE:='우수';
               WHEN 7 THEN
              V_GRADE:='보통';
               WHEN 6 THEN
                 V_GRADE:='미흡';
                ELSE
              V_GRADE:='매우미흡';
              
              END CASE;
              DBMS_OUTPUT.PUT_LINE(V_SCORE||'=>'||V_GRADE);
               END;
    
     DECLARE
       V_SCORE NUMBER:=88;
       V_GRADE VARCHAR2(50);
       BEGIN
        CASE WHEN TRUNC(V_SCORE/10)=10 OR TRUNC(V_SCORE/10)=9 THEN
              V_GRADE:='매우 우수';
               WHEN TRUNC(V_SCORE/10)=8 THEN
              V_GRADE:='우수';
               WHEN TRUNC(V_SCORE/10)=7 THEN 
              V_GRADE:='보통';
               WHEN TRUNC(V_SCORE/10)=6 THEN
                 V_GRADE:='미흡';
                ELSE
              V_GRADE:='매우미흡';
              
              END CASE;
              DBMS_OUTPUT.PUT_LINE(V_SCORE||'=>'||V_GRADE);
               END;