Oracle SQLブランチコマンド
> ## 2. ブランチコマンド
IF文CASE WHEN-THEN文の提供
開発言語の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倍ではありません.
四百年
購入金額合計100万以上であれば、「vip会員」
50万~100万:「通常会員」
以下「劣等会員」を印刷してください第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未満
「非常に不足している」
IF文CASE WHEN-THEN文の提供
1)IF文
開発言語のIF文と同じ機能を提供
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文
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;
Reference
この問題について(Oracle SQLブランチコマンド), 我々は、より多くの情報をここで見つけました https://velog.io/@vgo_dongv/Oracle-SQL-분기명령テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol