오라클에서는 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)을 반환합니다.
'개발공부 > SQL' 카테고리의 다른 글
PL/SQL 저장 프로시저(IN, OUT, IN OUT, 바인드 변수) (5) (0) | 2023.04.09 |
---|---|
PL/SQL 반복문 (4) (0) | 2023.04.06 |
PL/SQL 의 출력문 일반 SQL과의 차이 (0) | 2023.04.06 |
PL/SQL 에서 SELECT , INTO(2) (0) | 2023.04.05 |
PL/SQL의 구조 (1) (0) | 2023.04.05 |