CASE문은 IF/ELSE의 ver2 정도로 생각하면 될 것 같다. 쓰임새는 조금 다른데 IF/ELSE는 TRUE/FALSE만 주로 다룬다면 CASE는 특정 값에 대해 판단한다.
CASE selector
WHEN selector_value_1 THEN
statements_1
WHEN selector_value_1 THEN
statement_2
...
ELSE
else_statements
END CASE;
백문이불여일견이다.
DECLARE
c_grade CHAR(1);
c_rank VARCHAR(20);
BEGIN
c_grade := 'B';
CASE c_grade
WHEN 'A' THEN
c_rank := 'Excellent';
WHEN 'B' THEN
c_rank := 'Very Good';
WHEN 'C' THEN
c_rank := 'Good';
WHEN 'D' THEN
c_rank := 'Fair';
WHEN 'F' THEN
c_rank := 'Poor';
ELSE
c_rank := 'No such grade';
END CASE;
DBMS_OUTPUT.PUT_LINE(c_rank);
END;
누구기준인진 몰라도 상당히 후하다. C가 Good이라니. 아무튼 begin에서 정해주는 c_grade를 가지고 case를 판단해준다. 이런식으로 값이 정해진 CASE문 이외에 범위로 결정해주는 CASE문도 있다.
CASE
WHEN condition_1 THEN statements_1
WHEN condition_2 THEN statements_2
...
WHEN condition_n THEN statements_n
[ ELSE
else_statements ]
END CASE;]
이렇게 사용한다.
DECLARE
n_sales NUMBER;
n_commission NUMBER;
BEGIN
n_sales := 150000;
CASE
WHEN n_sales > 200000 THEN
n_commission := 0.2;
WHEN n_sales >= 100000 AND n_sales < 200000 THEN
n_commission := 0.15;
WHEN n_sales >= 50000 AND n_sales < 100000 THEN
n_commission := 0.1;
WHEN n_sales > 30000 THEN
n_commission := 0.05;
ELSE
n_commission := 0;
END CASE;
DBMS_OUTPUT.PUT_LINE( 'Commission is ' || n_commission * 100 || '%'
);
END;
'Database > PL SQL' 카테고리의 다른 글
PL/SQL Tutorial - LOOP (0) | 2019.05.08 |
---|---|
PL/SQL Tutorial - NULL (0) | 2019.05.07 |
PL/SQL Tutorial - GOTO (0) | 2019.05.07 |
PL/SQL Tutorial - IF (0) | 2019.04.30 |
PL/SQL Tutorial - Type, Variables (0) | 2019.04.30 |