DB/오라클(Oracle)

[Oracle] 오라클 PL/SQL(IF, CASE, LOOP, WHILE, FOR)

푸코잇 2023. 12. 12. 14:39
728x90

PL/SQL(Procedural Language/SQL)이란?

오라클에서 제공하는 절차적인 기능을 가진 프로그래밍 언어이다.

주로 SQL 명령문만으로 처리하기 복잡한 자료의 저장이나 프로시저, 트리거 등을 작성하는 데 쓰인다.

 

PL/SQL 구조

DECLARE
	-- 선언부(변수, 상수, CURSOR, 사용자정의 Exeception)
BEGIN
	-- 실행부(SQL, 조건문, 반복문)
EXCEPTION
	-- 예외 처리
END;

만약 선언부가 없다면 DECLARE 생략 가능하다.

예외처리하지 않는다면 EXCEPTION 생략 가능하다.


조건문(IF문)

문법

-- 기본 IF문
IF 조건 THEN 실행문;
END IF;

-- ELSE포함 IF문
IF 조건 THEN 실행문;
ELSE 실행문;
END IF;

-- 다중 IF문
IF 조건 THEN 실행문;
ELSIF 조건 THEN 실행문;
...
ELSE 실행문;
END IF;

 

사용예시

-- :=는 대입연산자
DECLARE
	SCORE NUMBER := 75;
	GRADE VARCHAR2(5);
BEGIN
	IF SCORE >= 90 THEN GRADE := 'A';
	ELSIF SCORE >= 80 THEN GRADE := 'B';
	ELSIF SCORE >= 70 THEN GRADE := 'C';
	ELSIF SCORE >= 60 THEN GRADE := 'D';
	ELSE GRADE := 'F';
	END IF;
	DBMS_OUTPUT.ENABLE;
	DBMS_OUTPUT.PUT_LINE('당신의 점수 : '||SCORE||'점'||CHR(10)||'학점 : '||GRADE);
END;

PLSQL-IF
PL/SQL IF문 결과

 

점수에 따른 학점을 출력하는 예시이다.

 

만약 DBMS_OUTPUT.PUT_LINE 부분에서 ORA-06550 에러가 발생한다면 CMD를 실행하여 다음과 같이 입력하면 된다.

ORA-06550
ORA-06550


조건문(CASE문)

 

문법

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

 

사용예시

 

DECLARE
	DEPT_NO NUMBER := 100;
	DEPT_NAME VARCHAR2(10);
BEGIN
	DEPT_NAME := CASE DEPT_NO
                WHEN 100 THEN 'IT'
                WHEN 200 THEN 'SALES'
                WHEN 300 THEN 'MARKETING'
                END;
	DBMS_OUTPUT.ENABLE;
	DBMS_OUTPUT.PUT_LINE(DEPT_NAME);
END;

PLSQL-CASE
PL/SQL CASE문 결과

 

CASE문을 이용해서 DEPT_NO에 따른 DEPT_NAME에 값을 할당하는 예제이다.


반복문(LOOP)

문법

LOOP
	반복작업
EXIT WHEN 조건;
END LOOP;

 

사용예시

DECLARE
	NO NUMBER := 0;
BEGIN
	LOOP
		NO := NO + 20;
	EXIT WHEN NO = 100;
	END LOOP;
	DBMS_OUTPUT.ENABLE;
	DBMS_OUTPUT.PUT_LINE(NO);
END;

PLSQL-LOOP
PL/SQL LOOP 결과

 

LOOP는 do-while처럼 조건에 상관없이 1번 수행 후 조건을 확인한다.

NO가 100일 때 EXIT 조건이 만족하여 반복문을 끝낸다.


반복문(WHILE)

문법

WHILE 조건 LOOP
	반복문
END LOOP;

사용예시

DECLARE
	NO NUMBER := 0;
BEGIN
	WHILE NO != 100 LOOP
		NO := NO + 20;
	END LOOP;
	DBMS_OUTPUT.ENABLE;
	DBMS_OUTPUT.PUT_LINE(NO);
END;

PLSQL-WHILE
PL/SQL WHILE 결과

 

LOOP와 동일한 결과를 나타내는 WHILE문이다.

LOOP와 다르게 조건을 먼저 검사하여 만족 시 반복 수행한다.

조건이 NO != 100으로 되었다는 걸 잘 인지하자.


반복문(FOR)

문법

FOR 인덱스 IN [REVERSE] 시작점 .. 종료점 LOOP
	반복작업
END LOOP;

사용예시

-- 0부터 10까지 출력
BEGIN
	FOR A IN 0 .. 10 LOOP
		DBMS_OUTPUT.PUT_LINE(A);
	END LOOP;
END;

-- 10부터 0까지 출력
BEGIN
	FOR A IN REVERSE 0 .. 10 LOOP
		DBMS_OUTPUT.PUT_LINE(A);
	END LOOP;
END;

PLSQL-FOR
PL/SQL FOR문 결과