PL/SQL
Procedural Language/Structured Query Language의 줄임말이다. 오라클의 SQL 전용 언어라고 보면 된다. 일반 SQL 문으로는 처리하기 어려운 문제들이 있는데, SQL에 변수, 제어, 입출력 등 기능을 추가해서 그런 문제들을 해결할 수 있게 돕는다.
PL/SQL는 크게 3가지다.
- 프로시저
- 트리거
- 사용자 지정 함수
트리거(TRIGGER)
트리거는 참조되는 테이블 간 한쪽에 변경이 생기면 다른 한쪽의 값을 자동으로 바꿔주는 자동화 기능이다. 간단한 예로 판매 제품 테이블과 창고 재고 테이블이 있을 때 재고 수량을 늘리면 제품 테이블의 수량도 늘어나는 식이다.
사용문법
CREATE [OR REPLACE] TRIGGER 트리거명
{BEFORE / AFTER}
UPDATE / INSERT / DELETE ON 테이블명 -- 어떤 테이블에 어떤 이벤트가 발생
[FOR EACH ROW] -- 변경된 한줄 한줄에 대해 모두 처리
DECLARE
변수선언
BEGIN
실행할 PL/SQL 프로그램 코딩
END;
/
BEFORE
을 사용하면 UPDATE / INSERT / DELETE문이 실행되기 전에 트리거가 실행되며 AFTER
를 사용하면 UPDATE / INSERT / DELETE문이 실행된 후에 트리거가 실행된다.
FOR EACH ROW
옵션이 사용되면 변경된 한줄 한줄에 대해 모두 처리하는 행 트리거가 된다.
아래 예제는 Book이라는 테이블과 Book_log라는 테이블이 있는 상태에서 진행했다. Book 테이블은 파라미터로 bookid, bookname, publisher, price를 가지고 있다. Book_log 테이블 역시 동일한 파라미터를 가지고 있다.
CREATE OR REPLACE TRIGGER AfterInsertBook
AFTER INSERT -- 트리거를 작동하게 하는 명령문은 INSERT 수행 후
ON book -- 트리거를 부착할 테이블 book
FOR EACH ROW -- 각 행마다 적용됨
DECLARE
BEGIN -- 트리거 작동시 실행하는 코드
INSERT INTO book_log
VALUES(:new.bookid, :new.bookname, :new.publisher, :new.price);
END;
/
:new
는 새롭게 입력된 값을 의미한다. 즉
INSERT INTO book_log
VALUES(:new.bookid, :new.bookname, :new.publisher, :new.price);
라는 코드는 트리거가 작동하면(book테이블에 INSERT
가 수행된 경우) book_log 테이블에도 새롭게 입력된 값을 각각의 파라미터에 넣어준다는 의미다.
INSERT INTO book values(23, '자바 프로그래밍', '한빛아카데미', 26000);
이제 이처럼 book 테이블에 INSERT
를 실행하면 book_log 테이블에도 동일하게 값이 저장된다.
'Database' 카테고리의 다른 글
[오라클/ORACLE] JDBC로 DB 연동 | 자바로 SQL문 실행하기 (0) | 2021.06.05 |
---|---|
[데이터베이스/DB] 트랜잭션 - 기능을 단위로 묶는 이유 (0) | 2021.06.04 |
[오라클/ORACLE] PL/SQL - 프로시저(PROCEDURE) | 저장하고 사용하는 SQL (0) | 2021.06.03 |
[오라클/ORACLE] 시퀀스(SEQUENCE) - NEXTVAL | CURRVAL | 초기화 (0) | 2021.06.01 |
[오라클/ORACLE] 데이터 잘라서 보는 ROWNUM (0) | 2021.06.01 |