1. 개요
2. 주석
3. 블록
PL/SQL의 가장 기본적인 구조이다.기본적으로
BEGIN으로 시작해 END로 끝나는 부분이다.DECLARE- 변수 선언 영역.BEGIN- 블록 본문 코드의 시작점.EXCEPTION- 예외 처리 영역.END- 해당 블록의 끝을 의미한다.
4. 자료형
4.1. 레코드
4.2. %TYPE과 %ROWTYPE
참조하는 테이블이나 칼럼에서 타입을 가져오는 어트리뷰트. 즉,table.col%TYPE은 table이라는 테이블의 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 LOOP7. 커서
크게 implicit cursor와 explicit cursor로 나뉜다.7.1. 명시적 커서
- (선언) - 해당 커서를
DECLARE블록에 선언한다. 명시적 커서의 경우 보통 이때CURSOR <식별자> IS <쿼리>;를 통해 파라미터도 같이 정의된다. OPEN- 해당 커서가 가리키는 데이터를 읽기 시작한다.FETCH- 현재 포인터가 바라보고 있는 영역의 row를 메모리로 불러온다. 하나의FETCH가 끝나고 나면 자동으로 포인터가 다음 데이터를 가리키도록 증가하므로 기본적으로 커서에서 한 번 읽었던 행을 다시 읽는 것은 불가능하다. 모든 행을 다 가져오고 싶다면%NOTFOUND가 뜰 때까지FETCH콜을 반복해야 하며, 이 때 주로 반복문 등을 사용한다.CLOSE- 해당 커서를 닫는다.
8. 예외 처리
일반적인 블록의 아래 영역에 작성된다.#!syntax sql
BEGIN
-- ...
EXCEPTION
WHEN <예외1> THEN
-- ...
WHEN <예외2> THEN
-- ...
WHEN others THEN
-- ...
END;각 종류의 예외가 매칭될 때마다 해당 구간이 실행된다. 아무 WHEN 유형에도 해당하지 않으면 others에 매칭된다.