1. 절차형 SQL 개요
일반적인 개발 언어처럼 SQL 언어에서도 절차 지향적인 프로그램이 가능하도록 하는 트랜잭션 언어이다.
2. PL/SQL 개요
블럭 구조로 되어 있고 블럭 내에는 DML문장과 Query 문장, 그리고 절차형 언어(IF, LOOP) 등을 사용할 수 있으며 절차적 프로그래밍을 가능하게 하는 트랜잭션 언어이다.
- PL/SQL 구조
- 선언부(DECLARE) : 프로시저의 명칭, 변수와 인수 그리고 그에 대한 데이터 타입을 정의하는 부분
- 시작/종료부(BEGIN/END) : 프로시저의 시작과 종료를 표현
- 제어부(CONTROL) :
- 예외부(EXCEPTION) : BEGIN~END 절에서 실행되는 SQL 문이 실행될 때 예외 발생 시 예외 처리 방법을 정의하는 처리부
2.1 프로시저
CREATE [OR REPLACE] PROCEDURE 프로시저명
(파라미터명 [IN|OUT|INOUT] 데이터타입, ... ... )
IS
변수선언
BEGIN
명령어;
[COMMIT|ROLLBACK]
END;
- [OR REPLACE] : 기존 프로시저 존재시 현재 컴파일 하는 내용으로 덮어씀
- [IN|OUT|INOUT] : 변수의 입출력 구분, (운영체제에서 프로시저로 값을 전달하는 모드/프로시저에서 처리된 결과를 운영체제로 전달하는 모드/두가지 기능을 동시에 수행)
- BEGIN : 프로시저의 시작
- COMMIT : 하나의 트랜잭션이 성공적으로 끝나고, 데이터베이스가 일관성 있는 상태에 있을 때 하나의 트랜잭션이 끝났을 때 사용하는 연산
- ROLLBACK : 하나의 트랜잭션이 비정상적으로 종료되어 트랜잭션 원자성이 깨질 경우 처음부터 다시 시작하거나, 부분적으로 연산을 취소하는 연산
- END : 프로시저의 끝
2.2 사용자 정의함수
- 기본적인 사항은 프로시저와 동일하고 반환에서의 부분만 프로시저와 다르다.
- 사용자 정의함수 문법
CREATE [OR REPLACE] FUNCTION 함수명
(파라미터명 IN 데이터타입, ... ... )
RETURN 데이터타입
IS
변수선언
BEGIN
명령어;
RETURN 변수;
[COMMIT|ROLLBACK]
END;
- RETURN 데이터타입 : 사용자 정의함수가 반환하는 데이터 타입을 정의
- RETURN 데이터값 : 사용자 정의함수가 종료될 때 반환하는 단일 값을 정의
2.3 트리거
-
데이터베이스 시스템에서 삽입, 갱신, 삭제 등의 이벤트가 발생할 때마다 관련 작업이 자동으로 수행되는 절차형 SQL이다.
-
이벤트는 전체 트랜잭션 대상과 각 행에 의해 발생하는 경우 모두를 포함할 수 있으며 테이블과 뷰, DB 작업을 대상으로 정의할 수 있다.
-
목적
- 데이터 무결성 유지 및 로그 메시지 출력 등의 별도 처리를 위해 트리거 사용
- 이벤트와 관련된 테이블의 데이터 삽입, 추가, 삭제 작업을 DBMS가 자동적으로 실행시키는 데 활용
-
종류
- 행 트리거 : 데이터 변화가 생길 때마다 실행
- 문장 트리거 : 트리거에 의해 단 한 번 실행
-
트리거 문법
CREATE [OR REPLACE] TRIGGER 트리거명
[BEFORE|AFTER] 유형 ON 테이블명
[FOR EACH ROW]
BEGIN
END;
- [BEFORE|AFTER] : DML과 트리거가 실행되는 순서의 전후 관계를 결정
- [FOR EACH ROW] : 매번 변경되는 데이터 행의 수만큼 실행을 위한 명령어
프로시저와 트리거의 차이점
프로시저 | 트리거 |
---|
CREATE 프로시저 문법 사용 | CREATE 트리거 문법 사용 |
EXECUTE 명령어로 실행 | 생성 후 자동 실행 |
COMMIT, ROLLBACK 실행 가능 | COMMIT, ROLLBACK 실행시 컴파일 에러 |