Notice
Recent Posts
Recent Comments
관리 메뉴

Developer Gonie

[6주차] 31. PL/SQL언어, case문 작성하는 방법 본문

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;
/
Comments