본문 바로가기

개발공부/SQL

PL/SQL 선택문, 조건문 / DECODE 함수 (3)

728x90
반응형

오라클에서는 3가지 형태의 선택문이 제공된다.

 

3.1 IF ~ THEN ~ END IF

 

IF condtion THEN	..... 조건문
	statements;		..... 조건에 만족할 경우 실행되는 문장
END IF

 

조건이 TRUE 이면 THEN 이하의 문장을 실행하고, 조건이 FALSE나 NULL이면 END IF 다음 문장을 수행한다.

 

 

3.2 IF ~ THEN ~ ELSE ~ END IF

 

[문장1]
IF condtion THEN	..... 조건문
	statements;		..... 조건에 만족할 경우 실행되는 문장[문장2]
ELSE
	statements;		..... 조건에 만족하지 않을 경우 실행되는 문장[문장3]

END IF
[문장4]

[문장1]을 수행하고 if 문을 만나면 조건문을 검사.

그 결과가 참이면 [문장2]

거짓이면 [문장3]

이 후 [문장4] 수행

 

<Ex>

DECLARE
   v_num1 number := 10;
   v_num2 number := 20;
BEGIN
   IF v_num1 > v_num2 THEN
      dbms_output.put_line('v_num1 is greater than v_num2');
   ELSE
      dbms_output.put_line('v_num1 is less than or equal to v_num2');
   END IF;
END;

출력 결과

v_num1 is less than or equal to v_num2

 

3.3 IF ~ THEN ~ ELSIF ~ ELSE ~ END IF

 

조건이 여러개여서 처리도 여러 개일 때 사용하는 다중 IF 문

IF condtion THEN	
	statements;		
ELSIF condtion THEN
	statements;	
ELSIF condtion THEN
	statements;	
ELSE
	statements;		
END IF

 

3.4 CASE 함수


CASE 문은 PL/SQL 문장이나 SELECT 문에서 사용되며, 조건에 따라 다른 실행 경로를 제공하는 제어문

CASE [조건]
   WHEN [값1] THEN [결과1]
   WHEN [값2] THEN [결과2]
   ...
   [ELSE [기본 결과]]
END CASE;

조건은 생략이 가능하며, 생략할 경우 WHEN 절에서 비교할 값만을 지정할 수 있다.

조건과 [값1], [값2] 등이 일치하는 경우 결과1, 결과2 등이 반환된다.

ELSE 절은 생략 가능하며, 모든 조건과 일치하지 않는 경우 지정된 기본 결과가 반환된다.

 

CASE 문에서는 다수의 WHEN 절을 사용하여 다양한 조건을 처리할 수 있다.

또한,  CASE문 안에서 다른 CASE문을 사용할 수 있다. 

 

<EX>

DECLARE
   v_num1 NUMBER := 10;
   v_num2 NUMBER := 20;
   v_num3 NUMBER := 15;
   v_max NUMBER;
BEGIN
   v_max := CASE 
               WHEN v_num1 >= v_num2 AND v_num1 >= v_num3 THEN v_num1 	-- v_num1이 가장 큰 경우
               WHEN v_num2 >= v_num1 AND v_num2 >= v_num3 THEN v_num2 	-- v_num2가 가장 큰 경우
               ELSE v_num3 						-- v_num3이 가장 큰 경우
            END;
   DBMS_OUTPUT.PUT_LINE('The maximum number is ' || v_max);
END;
/

위 코드에서 CASE 문을 사용하여 각 숫자 변수 값과 비교하여 가장 큰 값을 구하고 그 값을 변수 v_max 에 할당하는 코드다.

 

출력 결과 

The maximum number is 20

 

3.5 DECODE 함수


Oracle SQL에서 제공하는 함수 중 하나로, IF-THEN-ELSE 문을 대체하는 간결한 구문

DECODE 함수는 SQL 문장에서만 사용할 수 있으므로, PL/SQL에서는 사용할 수 없다.

PL/SQL에서는 CASE 문을 활용해야 한다.

DECODE( 표현식, 조건1, 결과1 
		, 조건2, 결과2,
        ... , 
        기본 결과
        )
 
DECODE( expression, search1, result1 [, search2, result2, ...] [, default] )


expression: 검색 대상이 되는 값
search: 검색할 값
result: search와 매치될 때 반환할 값입
default (선택 사항): 어떤 값과도 매치되지 않을 때 반환할 값

 


DECODE 함수는 먼저 expression을 평가한 후, search1과 일치하는 경우 result1을 반환하고, search2와 일치하는 경우 result2를 반환하며, 이와 같은 과정을 default 값이 주어질 때까지 반복한다.

 

<EX>

다음은 DECODE 함수를 사용하여 성적에 따라 학점을 반환하는 예시

SELECT name, grade, DECODE(grade, 10, 'A+', 9, 'A', 8, 'B', 7, 'C', 6, 'D', 'F') AS letter_grade
FROM student;


위의 예시에서 DECODE 함수는 grade 값을 10, 9, 8, 7, 6에 대해 비교하고, 각 조건에 맞는 학점을 반환합니다. 예를 들어, grade가 10이면 'A+'를, 9이면 'A'를 반환합니다. 만약 위의 조건에 해당하지 않으면 마지막 매개변수로 지정된 값, 즉 'F'를 반환합니다.

따라서, 위의 예시는 student 테이블에서 이름(name)과 성적(grade)을 선택하며, DECODE 함수를 사용하여 학점(letter_grade)을 반환합니다.

 

 

728x90
반응형