나무모에 미러 (일반/밝은 화면)
최근 수정 시각 : 2026-02-26 15:05:52

PL/SQL/문법


1. 개요2. 주석3. 블록4. 자료형
4.1. 레코드4.2. %TYPE과 %ROWTYPE
5. 변수6. 제어문
6.1. 조건문6.2. 반복문
7. 커서
7.1. 명시적 커서
8. 예외 처리9. 함수10. 프로시저

1. 개요

2. 주석

3. 블록

PL/SQL의 가장 기본적인 구조이다.

기본적으로 BEGIN으로 시작해 END로 끝나는 부분이다.

4. 자료형

4.1. 레코드

4.2. %TYPE과 %ROWTYPE

참조하는 테이블이나 칼럼에서 타입을 가져오는 어트리뷰트. 즉, table.col%TYPEtable이라는 테이블의 col이라는 칼럼과 같은 타입을 사용하겠다는 의미이다. 비슷하게 %ROWTYPE은 테이블에서 record 타입을 가져온다. 해당 문법을 사용해 정의된 선언을 흔히 anchored declaration이라고도 부른다.

5. 변수

식별자는 로마자로 시작하며 로마자, 숫자, $, #으로만 이루어질 수 있다. 최대 길이는 30자까지 허용된다.

기본적으로
<식별자> <자료형>;
과 같이 정의한다. 초기값을 할당하려면 :=를 사용해
<식별자> <자료형> := <값>;
과 같이 쓸 수 있다. BEGIN 내 블록에서 할당하는 문법도 자료형 부분만 빼면 동일하다.

SQL과 비슷하게 모든 변수는 기본적으로 NULL을 가질 수 있는데, 변수 선언시 타입 뒤에 NOT NULL을 붙혀 값이 항상 들어있도록 강제할 수 있다. 이 경우 반드시 변수 선언과 동시에 초기값이 할당되어 있어야 한다.

상수를 선언하려면 자료형 앞에 CONSTANT를 붙히면 된다.
#!syntax sql
DECLARE
    seed CONSTANT VARCHAR2(64) := 'namuwiki';
상수 선언도 NOT NULL과 비슷하게 초기값이 주어져 있어야 한다.

6. 제어문

6.1. 조건문

기본적으로 다음과 같은 같은 문법을 사용한다.
#!syntax sql
IF <조건> THEN
    -- 코드;
END IF;
주어진 조건을 만족하지 못했을 때도 별도의 코드를 실행하고 싶다면 if-else문을 사용한다.
#!syntax sql
IF <조건> THEN
    -- 코드;
ELSE
    -- 코드;
END IF;
마찬가지로 여러 조건들을 순차적으로 전부 평가하고 싶다면 원하는 만큼 elsif문을 넣으면 된다.
#!syntax sql
IF <조건> THEN
    -- 코드;
ELSIF <조건> THEN
    -- 코드;
ELSIF <조건> THEN
    -- 코드;
ELSE
    -- 코드;
END IF;

6.2. 반복문

가장 기본적인 반복문은 무한 루프로, 해당 반복문을 포함해서 이에 기반하는 모든 반복문 문법은 LOOP로 시작해서 END LOOP로 끝난다.
#!syntax sql
LOOP
    -- 코드
END LOOP
별다른 탈출 조건 설정이 따로 없는 가장 단순한 반복문이므로, 탈출을 위해서는 내부 코드에서 직접 EXIT을 사용해야 한다. 상술한 조건문과 결합해도 되고, 한 줄로 편하게 쓸 수 있는 EXIT WHEN <조건>; 문법도 존재한다.

while 루프의 경우 반대로 WHILE 뒤에 입력된 조건을 매번 평가하고, 해당 조건이 거짓이 되는 순간 루프가 중지된다.
#!syntax sql
WHILE <조건> LOOP
    -- 코드
END LOOP

7. 커서

크게 implicit cursor와 explicit cursor로 나뉜다.

7.1. 명시적 커서

8. 예외 처리

일반적인 블록의 아래 영역에 작성된다.
#!syntax sql
BEGIN
    -- ... 
EXCEPTION
    WHEN <예외1> THEN
        -- ...
    WHEN <예외2> THEN
        -- ...
    WHEN others THEN 
        -- ...
END;
각 종류의 예외가 매칭될 때마다 해당 구간이 실행된다. 아무 WHEN 유형에도 해당하지 않으면 others에 매칭된다.

9. 함수

10. 프로시저