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;
점수에 따른 학점을 출력하는 예시이다.
만약 DBMS_OUTPUT.PUT_LINE 부분에서 ORA-06550 에러가 발생한다면 CMD를 실행하여 다음과 같이 입력하면 된다.
조건문(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;
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;
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;
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;
'DB > 오라클(Oracle)' 카테고리의 다른 글
[Oracle] 오라클 뷰(VIEW) 사용법 (0) | 2023.12.09 |
---|---|
[Oracle] 오라클 테이블 구조 및 데이터 복사하기 (2) | 2023.12.06 |
[Oracle] 오라클 JOIN 사용법 (2) | 2023.12.04 |
[Oracle] 오라클 서브쿼리(SubQuery) 사용법 (4) | 2023.12.03 |
[Oracle] 오라클 GROUP BY, HAVING 사용법 (2) | 2023.12.02 |