K-DigitalTraining 강의/2. Oracle + PLSQL
[6주차] 31. PL/SQL언어, case문 작성하는 방법
이대곤
2022. 6. 17. 09:32
-- 첫번째 방법, 일반적인 구조
case(변수명)
when 변수값 혹은 변수 비교 then 실행부;
when 변수값 혹은 변수 비교 then 실행부;
else 실행부; -- 생략가능
end case;
-- 두번째 방법, 실행부에서 변수에 값을 할당하는 코드만 들어가있는 경우 활용가능한
변수 :=
case(변수명)
when 변수값 then 할당값 -- 세미콜론 제거
when 변수값 then 할당값 -- 세미콜론 제거
else 할당값 -- 생략가능
end; -- 이땐 case 키워드를 빼준다.
-- 세번째 방법, if문과 같이 수식을 이용해 구현하는 구조(Java는 case 문에서 수식을 넣는게 불가능한데 오라클은 가능)
case -- 여기에서 변수를 받지 않음
when 수식 then 실행부;
when 수식 then 실행부;
else 실행부; -- 생략가능
end case;
첫번째 방식, 일반적인 구조로 구현한 예시코드
declare
vfruit varchar2(20) := '&과일명';
vname varchar2(20);
begin
case(vfruit)
when 'apple' then vname := '사과';
when 'grape' then vname := '포도';
else vname := '과일아님';
end case;
dbms_output.put_line('입력한 영단어 : ' || vname);
end;
/
과일명의 값을 입력하십시오: apple
구 2: vfruit varchar2(20) := '&과일명';
신 2: vfruit varchar2(20) := 'apple';
입력한 영단어 : 사과
PL/SQL 처리가 정상적으로 완료되었습니다.
declare
vdepartnum number := '&부서번호';
vdepartname varchar2(20);
begin
case(vdepartnum)
when 10 then vdepartname := '총무부';
when 20 then vdepartname := '개발부';
when 30 then vdepartname := '영어부';
else vdepartname := '잘못입력함';
end case;
dbms_output.put_line('부서번호에 해당하는 부서이름 : ' || vdepartname);
end;
/
부서번호의 값을 입력하십시오: 20
구 2: vdepartnum number := '&부서번호';
신 2: vdepartnum number := '20';
부서번호에 해당하는 부서이름 : 개발부
PL/SQL 처리가 정상적으로 완료되었습니다.
두번째 방식, 중복되는 값 할당 코드를 줄일 수 있는 방식
declare
vdepartnum number := '&부서번호';
vdepartname varchar2(20);
begin
vdepartname :=
case(vdepartnum)
when 10 then '총무부'
when 20 then '개발부'
when 30 then '영어부'
else '잘못입력함'
end; -- 위의 변수에 값이 들어가는 것 까지 해야 끝나므로 case 키워드는 빼줘야함.
dbms_output.put_line('부서번호에 해당하는 부서이름 : ' || vdepartname);
end;
/
부서번호의 값을 입력하십시오: 10
구 2: vdepartnum number := '&부서번호';
신 2: vdepartnum number := '10';
부서번호에 해당하는 부서이름 : 총무부
PL/SQL 처리가 정상적으로 완료되었습니다.
세번째 방식, if문과 같이 수식을 이용해 구현하는 구조
-- case문으로 변환시킬 if문으로 구현된 코드
declare
vid number := '&id';
vsalary number;
result varchar2(10);
begin
select id, salary
into vid, vsalary
from members
where id = vid;
if vsalary >= 1000 then
result := '높음';
elsif vsalary >= 500 then
result := '보통';
else
result := '낮음';
end if;
dbms_output.put_line(result);
end;
/
-- if문과 같이 수식을 사용한 case문
declare
vid number := '&id';
vsalary number;
result varchar2(10);
begin
select id, salary
into vid, vsalary
from members
where id = vid;
case
when vsalary >= 1000 then result := '높음';
when vsalary between 500 and 900 then result := '보통';
else result := '낮음';
end case;
dbms_output.put_line(result);
end;
/