-
[DataBase] PL/SQL 프로시저, 함수, 트리거CSE/DataBase 2015. 6. 12. 16:01프로시저
개념: 매개 변수를 받을 수 있고, 반복해서 사용할 수 있는 이름이 있는 PL/SQL 블록
용도: 연속 실행 또는 구현이 복잡한 트랜잭션을 수행하는 PL/SQL블록을 DB에 저장하기 위해 생성
- 저장 프로시저(함수)를 사용하는 이유
정보 캡슐화
기능의 재사용
트랜잭션 제어
DB 내에서 미리 컴파일 되어 저장되므로 필요할 때마다 매번 다시 변환해야 하는 SQL 문 보다 빠르게 실행
저장 프로시저에서 발생하는 문법 오류는 실행 시간이 아닌 컴파일 때 바로 잡을 수 있음
형식
CREATE [OR REPLACE] PROCEDURE'프로시저 명'
(IN argument
OUT argument
IN OUT argument)
IS
[변수 선언]
BEGIN -- 필수
[PL/SQL Block]
[EXCEPTION]
END;
특징
- 실행 환경과 프로그램 사이에 값을 주고 받는 역할
- 블록 안에서의 변수와 똑같이 일시적으로 값을 저장하는 역할
함수
개념: 매개 변수를 받을 수 있고, 반복해서 사용할 수 있는 이름이 있는 PL/SQL 블록
용도: 연속 실행 또는 구현이 복잡한 트랜잭션을 수행하는 PL/SQL블록을 DB에 저장하기 위해 생성
- 프로시저와의 차이점 및 특징
결과값 리턴
대부분 구성이 프로시저와 유사하지만, IN 패러미터만 사용 가능
리턴될 값의 데이터 타입을 RETURN 문에 선언
PL/SQL블록 내에서 RETURN문을 통해서 반드시 값을 반환해야 함
형식
CREATE [OR REPLACE] FUNCTION '함수 명'
[(argument...)]
RETURN datatype
-- datatype은 반환되는 값의 datatype
IS
[변수 선언 부분]
BEGIN
END;
트리거
DB에 특정한 변경이 가해졌을 때 DBMS가 이에 대응해서 자동적으로 호출하는 일종의 프로시저
프로시저와 함수는 그 실행이 외부적인 실행 명령에 의해 이루어지는데 반해, 트리거의 실행은 트리거링 사건(Triggering Event)에 의해 내부적으로 이루어짐
트리거를 일으키는 사건(event): DB 테이블에 DML문이 발생할 때
INSERT, UPDATE, DELETE문의 사용에 사건을 정의할 수 있으며 이들을 실행할 때 정의된 트리거도 자동 실행
테이블과 별도로 데이터베이스에 저장
뷰에 대해서가 아니라 테이블에 관해서만 정의
- 트리거 구성
사건(event): 트리거를 가동
조건(condition): 트리거 수행 여부 검사
동작(action): 트리거가 수행될 때 일어나는 일
형식
CREATE [OR REPLACE] TRIGGER '트리거 명'
BEFORE | AFTER trigger_event ON '테이블 명'
[FOR EACH ROW]
[WHEN (condition)]
PL/SQL block
* trigger event: INSERT, UPDATE, DELETE 중 한 개 이상
트리거의 용도
- 테이블 생성시 참조 무결성과 데이터 무결성 그밖의 다른 제약 조건으로 정의할 수 없는 복잡한 요구사항에 대한 제약조건을 생성
- 테이블의 데이터에 생기는 작업을 감시, 보안할 수 있다.
- 테이블에 생기는 변화에 따라 필요한 다른 프로그램을 실행 시킬 수 있다.
'CSE > DataBase' 카테고리의 다른 글
[DataBase] PL/SQL 이란 (0) 2015.06.12 [DataBase] Oracle에 Excel 파일 Import (0) 2015.06.12