본문 바로가기

Database/PL SQL

PL/SQL Tutorial - CASE

 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