PL/SQL
Oracle's Procedural Language extension to SQL의 약자로, SQL 문장에서 변수 정의, 조건 처리(IF), 반복 처리(LOOP, WHILE, FOR) 등을 지원한다. 오라클 자체에 내장된 Procedure Language이다.
PL/SQL 자신이 컴파일 엔진을 가지고 있으며 PL/SQL의 모든 요소는 하나 또는 두 개 이상의 블록으로 구성하여 모듈화가 가능하다.
PL/SQL 문은 블록 구조로 되어 있어 다수의 SQL 문을 한 번에 Oracle DB로 보내어 수행 속도를 향상할 수 있다. 하지만 Procedure를 잘못 작성하게 되면 수행 속도를 저하시킬 수도 한다.
큰 블록(BEGIN~END) 안에 소블록(BEGIN~END)이 여러 개 들어갈 수 있다.
테이블의 데이터 구조와 칼럼명에 준하여 동적으로 변수를 선언할 수 있다.
EXCEPTION 처리 루틴을 이용하여 Oracle Server Error를 처리할 수 있다. 이때 사용자 정의 에러를 선언하여 EXCEPTION 처리 루틴으로도 처리할 수 있다.
PL/SQL Block Structure
PL/SQL 블록은 선언부, 실행부, 예외 처리부로 구성되어 있고 실행부는 필수적으로 들어가야 하지만 선언부와 예외 처리부는 선택적으로 들어갈 수 있다.
PL/SQL을 사용하기 위해서는 BEGIN과 END 키워드를 반드시 기술해주어야 한다. BEGIN이 시작되는 부분부터가 실행 부이다. 보통 예외 처리부는 실행부 가장 아래에 위치한다.
Declarative Section(선언부)
변수, 상수, CURSOR, USER_DEFINE Exception을 선언한다.
Executable Section(실행부)
SQL, 반복분, 조건문을 실행하는 부분이다.
실행부는 BEGIN으로 시작하고 END로 종료되며 실행문은 프로그램 내용이 들어가는 부분이기 때문에 필수적으로 사용된다.
Exception Handling Section(예외처리부)
예외에 대한 처리를 하는 부분이다.
일반적으로 오류를 정의하고 처리한다.
작성 요령
PL/SQL 블록 내에서는 한 문장이 종료될 때마다 세미콜론(;)을 사용한다.
END 뒤에 세미콜론(;)을 명시하여 하나의 블록이 끝났다는 것을 명시해주어야 한다.
단일행 주석으로는 보통 --을 사용하고, 여러 행을 주석 처리하기 위해서는 /* */를 사용한다.
블록 유형
Anonymous Block (익명 블록)
[DECLARE]
BEGIN
-- statements
[EXCEPTION]
END;
익명 블록은 이름이 없는 블록으로, 실행하기 위해 프로그램 안에서 선언되고 실행 시에 PL/SQL 엔진으로 전달된다.
선행 컴파일러 프로그램과 SQL* Plus 또는 서버 관리자에서 익명의 블록을 내장할 수 있다.
Procedure (프로시저)
PROCEDURE name
IS
BEGIN
-- statements
[EXCEPTION]
END;
특정 작업을 수행할 수 있는 이름이 있는 PL/SQL 블록이다.
매개 변수를 받을 수 있고 반복적으로 사용할 수 있기 때문에 연속 실행 또는 구현이 복잡한 트랜잭션을 수행하는 PL/SQL 블록을 데이터베이스에 저장하기 위하여 생성한다.
Function (함수)
FUNCTION name
RETURN datatype
IS
BEGIN
-- statements
RETURN value;
[EXCEPTION]
END;
값을 계산하고, 계산한 결과 값을 반환하기 위해 함수를 많이 사용한다.
프로시저와 구성이 유사하지만, 함수에서는 IN 파라미터만 사용할 수 있고 반환될 값의 데이터 타입을 위쪽 RETURN문에 선언해야 한다. 또한 PL/SQL 블록 내 RETURN 문을 통해서 값을 반드시 반환해야 한다.
익명 블록은 테스트용으로, 저장되지 않는다. 그러나 프로시저와 함수는 저장이 된다.
저장된 프로시저는 Stored Procedure라 하고, 함수도 마찬가지로 Stored Function이라 한다.
출처
http://www.oracleclub.com/lecture/1039
http://www.oracleclub.com/lecture/1343