PL/SQL의 기본구조
PL/SQL이란? (Procedural Language extension to sql)
- Oracle 에서 SQL을 확장하여 사용할 수 있도록 만든 절차적 프로그래밍 언어
- db에 직접 탑재되어 compile되고 실행된다.
기본 구조
기본 단위는 Block 으로 이루어진다.
Block은 선언부 , 실행부 , 예외처리부 로 구성되는데, 익명 블록과 이름이 있는 블록 (함수,프로시저,패키지) 로 나뉜다.
1 | 이름부 ## BLOCK의 명칭이 오는 자리 |
- 기본구조에서 이름부와 예외처리부는 생략이 가능하며 , 이름부를 생략할 경우에는 익명 블록이라고 한다.
예제를 보면 다음과 같다.
1 | SET SERVEROUT ON; -- 입출력 ON |
변수 선언
특이하게 PL/SQL에서는 변수 선언 방식이 다음과 같다. 만약 초기값을 넣지 않으면 기본적으로 NULL이 된다.
1 | 변수명 데이터타입 := 초깃값; |
여기서 데이터타입은 SQL 또는 PL/SQL 데이터 타입이 들어갈 수 있다.
자세한 PL/SQL 데이터 타입은 공식문서(https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/datatypes.html) 에서 확인이 가능하다.
상수 선언은 변수 선언과 달리 CONSTANT 라는 키워드를 붙여주면 된다.
1 | 상수명 CONSTANT 데이터타입 := 상수값; |
사용예시
PL/SQL 블록을 작성하는 주 목적은 테이블 상에 있는 데이터를 가공해서 특정 로직에 따라 무언가를 처리하는 것이다. (DML문 사용)
1 | SET SERVEROUTPUT ON; |
위에 쿼리를 보면 SELECT문에서 INTO절을 사용한다. 즉 테이블에서 데이터를 가져와서 BLOCK에서 선언한 변수에 할당할때는 INTO 절을 사용한다는 뜻이다. 이때 선택하는 칼럼에 따라, 변수의 순서 , 개수 , 데이터 타입을 반드시 맞춰 줘야 한다.
이떄 선택하는 칼럼의 변수 타입을 일일히 맞춰주기 번거로울 수가 있는데 이떄는 테이블의 변수타입을 가지고 오는 문법을 지원한다.
1 |
|
- %TYPE 키워드를 사용하면 해당 테이블의 칼럼의 데이터 타입을 가져올 수 있다.
PRAGMA 키워드
- compiler가 실행되기 전에 처리하는 전처리기 역할을 한다.
- compiler가 뭔가를 처리하라고 지시하는 역할을 하는데, PL/SQL 블록 선언부에 명시한다.
PRAGMA AUTONOMOUS_TRANSACTION
transaction 처리를 담당하는데, 다른 transaction과는 독립적으로 현재 블록 내부에서 일어난 데이터베이스에 가해진 변경사항을 COMMIT 또는 ROLLBACK하라고 지시하는 역할을 수행한다.
PRAGMA EXCEPTION_INIT(예외명,예외번호)
사용자 정의 예외 처리를 할 떄 사용되는데, 특정 예외번호를 명시해서 compiler에 이 예외를 사용한다는 것을 알리는 역할을 한다.
PRAGMA SERIALLY_RESUABLE
패키지 메모리 관리를 쉽게 할 목적으로 사용되며, 패키지에 선언된 변수에 대해 한번 호출한 뒤 메모리를 해제 시킨다. 즉 해당 변수가 다음변수 호출되면 초기화된 값이나 NULL값으로 호출된다.
라벨
PL/SQL 프로그램 상에서 특정 부분에 이름을 부여할 수 있는데 이를 라벨이라고 하며 <<라벨>> 형태로 사용한다.
- 라벨을 사용하는 이유 : 코드가 길어질때 소스 코드 관리를 위함.