일반적인 개발 언어처럼 SQL 언어에서도 절차 지향적인 프로그램이 가능하도록 하는 트랜잭션 언어.
종류
- 프로시저 : 일련의 쿼리들을 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합
- 사용자 정의 함수 : 일련의 SQL 처리를 수행하고, 수행 결과를 단일 값으로 반환할 수 있는 SQL
- 트리거 : DB 시스템에서 삽입, 갱신, 삭제 등의 이벤트가 발생할 때마다 관련 작업이 자동으로 수행되는 SQL
DBMS_OUTPUT 패키지 종류
- DBMS_OUTPUT.PUT(문자열) : 개행없이 문자열을 출력하는 프로시저
- DBMS_OUTPUT.PUT_LINE(문자열) : 문자열 출력 후 개행하는 프로시저
[ 프로시저 ]
일련의 쿼리들을 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합
[ 프로시저 구성 ]
선언부 (DECLARE) : 프로시저의 명칭, 변수와 인수 그리고 그에 대한 데이터 타입을 정의하는 부분.
시작/종료부 (BEGIN / END) : 프로시저의 시작과 종료를 표현하며, BEGIN/END가 쌍을 이룸.
제어부 (CONTROL) : 순차적 처리. 조건문과 반복문을 이용한 문장 처리
SQL : DML 사용 및 DDL TRUNCATE사용
예외부 (EXCEPTION) : 예외 처리 정의하는 처리부
실행부 (TRANSACTION) : DBMS 적용 또는 취소 여부 결정하는 처리부
[ 프로시저 문법 ]
- IN : 운영체제에서 프로시저로 값을 전달하는 모드.
- OUT : 프로시저에서 처리된 결과를 운영체제로 전달하는 모드.
- INOUT : IN과 OUT의 두 가지 기능을 동시에 수행하는 모드.
[ 사용자 정의 함수 ]
일련의 SQL 처리를 수행하고, 수행 결과를 단일값으로 반환할 수 있는 절차형 SQL.
기본적인 사항은 프로시저와 동일. 종료 시 단일 값을 반환한다는 점에서 반환 부분만 프로시저와 다름.
[ 사용자 정의 함수 구성 ]
선언부 (DECLARE) : 사용자 정의 함수의 명칭, 변수와 인수 그리고 그에 대한 데이터 타입을 정의하는 부분.
시작/종료부 (BEGIN / END) : 사용자 정의 함수의 시작과 종료를 표현하며, BEGIN/END가 쌍을 이룸.
제어부 (CONTROL) : 순차적 처리. 비교 조건에 따라 블록 또는 문장을 실행.
SQL : 조회 용도 SELECT문. DML은 사용 불가
예외부 (EXCEPTION) : 예외 처리 정의하는 처리부
반환부 (RETURN) : 호출문에 대한 함수값 반환
[ 트리거 ]
DB에서 삽입, 갱신, 삭제 등의 이벤트가 발생 시 관련 작업이 자동으로 수행되는 절차형 SQL. 이벤트는 전체 트랜잭션 대상과 각행에 의해 발생하는 경우 모두를 포함할 수 있으며, 테이블과 뷰, DB 작업을 대상으로 정의함.
특정 테이블에 대한 데이터 변경을 시작점으로 설정 후, 그와 관련된 작업을 자동적으로 수행하기 위해 트리거 사용.
일반적으로 이벤트와 관련된 테이블의 데이터 삽입, 추가, 삭제 작업을 DBMS 가 자동적으로 실행시키는데 활용.
데이터 무결성 유지 및 로그 메시지 출력 등의 별도 처리를 위해 트리거 사용.
프로시저와 사용자 정의 함수와 기본 문법 같음.
반환값이 없고 DML을 주된 목적으로 한다는 점에서 프로시저와 유사.
EVENT 명령어를 통해 트리거 실행을 위한 이벤트를 인지함. 외부 변수 IN / OUT이 없다는 점에서 프로시저와 사용자 정의 함수와 다름.
[ 트리거 종류 ]
행 트리거 : 데이터 변화가 생길 때마다 실행
문장 트리거 : 트리거에 의해 단 한 번 실행
[ 트리거 구성 ]
- 선언부 (DECLARE) : 트리거의 명칭 정의
- 이벤트부 (EVENT) : 트리거가 실행되는 타이밍 및 이벤트를 명시하는 부분
- 시작/종료부 (BEGIN / END) : 트리거의 시작과 종료를 표현하는데 필수.
- 제어부 (CONTROL) : 순차적 처리. 비교 조건에 따라 블록 또는 문장 실행. 조건따라 반복 실행.
- SQL : DML 주 사용. TRUNCATE 사용. TCL 사용 불가.
- 예외부 (EXCEPTION)
[ 트리거 문법 ]
- BEFORE : 테이블명에 대한 삽입 / 갱신 / 삭제를 수행하기 전에 트리거가 실행하도록 지정하는 명령.
- AFTER : 테이블명에 대한 삽입 / 갱신 / 삭제가 성공적으로 실행되었을 때만 트리거가 실행하도록 지정하는 명령.