PL/SQL 제어문
2022-05-09 20:37:58
#database#oracle
- PL/SQL은 프로그래밍 언어에서 제공하는 다양한 처리문을 제공한다 (조건문,반복문 등)
IF문
- PL/SQL에서 제공하는 IF문의 구조는 다음과 같다.
-- 조건이 N개일 경우
IF 조건1 THEN
조건 처리1;
ELSIF 조건2 THEN
조건 처리2;
...
ELSE
조건 처리n;
END IF;
IF문 사용예시
DECLARE
vn_salary NUMBER := 0;
vn_department_id NUMBER := 0;
BEGIN
vn_department_id := ROUND(DBMS_RANDOM.VALUE(10,120),-1); -- 10~120까지 난수 생성 후 10의 자리(-1)에서 반올림 처리
SELECT salary
INTO vn_salary
FROM employees
WHERE department_id = vn_department_id
AND ROWNUM=1;
DBMS_OUTPUT.PUT_LINE(vn_salary);
IF vn_salary BETWEEN 1 AND 3000 THEN
DBMS_OUTPUT.PUT_LINE("low value");
ELSIF vn_salary BETWEEN 3001 AND 6000 THEN
DBMS_OUTPUT.PUT_LINE("mid value");
ELSIF vn_salary BETWEEN 6001 AND 10000 THEN
DBMS_OUTPUT.PUT_LINE("high value");
ELSE
DBMS_OUTPUT.PUT_LINE("highest");
END IF;
END;
CASE 문
CASE WHEN 표현식1 THEN
처리문1;
WHEN 표현식2 THEN
처리문2;
...
ELSE
기타 처리문;
END CASE;
- 표현식이 true로 판정되면 처리문을 수행한다.
CASE 문 사용예시
- IF-ELSIF-ELSE 제어문을 CASE문으로도 표현가능하다.
/***/
CASE WHEN vn_salary BETWEEN 1 AND 3000 THEN
DBMS_OUTPUT.PUT_LINE("low value");
WHEN vn_salary BETWEEN 3001 AND 6000 THEN
DBMS_OUTPUT.PUT_LINE("mid value");
WHEN vn_salary BETWEEN 6001 AND 10000 THEN
DBMS_OUTPUT.PUT_LINE("high value");
ELSE
DBMS_OUTPUT.PUT_LINE("highest");
END CASE;
/***/
- 만약 ELSE 절을 수행할 때 , 아무것도 처리하지 않고 싶은 경우에는 NULL문을 사용한다.
CASE WHEN vn_salary BETWEEN 1 AND 3000 THEN
DBMS_OUTPUT.PUT_LINE("low value");
WHEN vn_salary BETWEEN 3001 AND 6000 THEN
DBMS_OUTPUT.PUT_LINE("mid value");
WHEN vn_salary BETWEEN 6001 AND 10000 THEN
DBMS_OUTPUT.PUT_LINE("high value");
ELSE NULL; -- 아무것도 수행하지 않음
END CASE;
반복문 (LOOP,WHILE,FOR문)
LOOP문
LOOP
처리문;
EXIT [WHEN 조건];
END LOOP;
LOOP문 사용예시
DECLARE
vn_base_num NUMBER :=3;
vn_cnt NUMBER := 1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE(vn_base_num || "*" || vn_cnt || "= "
|| vn_base_num * vn_cnt );
vn_cnt:= vn_cnt+1;
EXIT WHEN vn_cnt > 9;
END LOOP;
END;
WHILE문
WHILE 조건
LOOP
처리문;
END LOOP;
WHILE 문 사용예시
WHILE vn_cnt <10
LOOP
DBMS_OUTPUT.PUT_LINE(vn_base_num || "*" || vn_cnt || "= "
|| vn_base_num * vn_cnt );
vn_cnt:= vn_cnt+1;
END LOOP;
FOR문 예시
FOR 인덱스 IN [REVERSE] 초깃값..최종값
LOOP
처리문;
END LOOP;
- 인덱스값은 초깃값~최종값까지 루프를 돌며 1씩 증가한다.
- 인덱스값은 참조는 가능하지만 변경할 수 없으며, 참조도 오직 루프 안에서만 가능하다. REVERSE 명시시 순서가 거꾸로 된다.
DECLARE
vn_base_num NUMBER := 3;
vn_cnt NUMBER := 1;
BEGIN
FOR i IN 1..9
LOOP
DBMS_OUTPUT.PUT_LINE(vn_base_num || "*" || i || "= "
|| vn_base_num * i );
END LOOP;
END;
- CONTINUE 키워드를 사용하면 바로 조건절로 넘어간다.
BEGIN
FOR i IN 1..9
LOOP
CONTINUE WHEN i=5;
DBMS_OUTPUT.PUT_LINE(vn_base_num || "*" || i || "= "
|| vn_base_num * i );
END LOOP;
END;
댓글
이 게시글에 대한 의견을 공유해주세요!
