728x90
트리거(Trigger)의 활용과 고려사항
트리거(Trigger)의 활용
1. 데이터 무결성 강화
- 전체 데이터베이스에 걸쳐 영향 받은 테이블을 연속적으로 변경함으로써 데이터 무결성을 강화하는데 사용될 수 있습니다.
- 중복되었거나 파생된 데이터에 대해 트리거를 사용하는 것이 좋습니다.
2. 참조 무결성 강화
- 연속적인 삭제 / 갱신이 일어날 필요가 있을 때 적절한 작업을 하도록 보장하는데 유용합니다.
- FOREIGN KEY, REFERENCE 제약을 사용할 수도 있습니다.
- 자신의 오류 메시지를 정의할 수 있습니다.
3. 업무 규칙 설정
- 제약에 의해 표현될 수 있는 것보다 복잡한 제약을 표현할 수 있습니다.
4. 감사 기능 확장
- 상세한 변경 내역을 추적하려면, 트리거를 적용하거나 Log Miner를 이용해 아카이브 로그를 뒤지는 수밖에 없습니다.
- 감사 목적으로 적용되는 트리거는 성능적으로 심각한 부담을 줄 수 있습니다.
트리거 고려사항
- 트리거는 각 테이블에 최대 3개까지 존재할 수 있습니다. (UPDATE, INSERT, DELETE 트리거가 각각 하나씩)
- 이미 트리거가 정의된 작업에 대해 다른 트리거를 정의하면 기존의 것을 대체합니다.
- 테이블의 소유자만이 트리거를 생성하거나 삭제할 수 있습니다.
- 뷰나 임시 테이블을 참조할 수 있으나, 뷰나 임시 테이블에 대해 생성할 수는 없습니다.
- 데이터 무결성이나 업무 규칙 처리에만 사용하는 것이 좋습니다.
- 트리거의 동작은 이를 삭제하지 않는 한 계속됩니다.
- 테이블의 삭제는 관련 트리거의 삭제를 유발합니다.
트리거(Trigger)
INSERT, UPDATE, DELETE문이 TABLE에 대해 행해질 때 묵시적으로 수행되는 프로시저.
트리거 생성/예시
CREATE OR REPLACE TRIGGER 트리거이름(영문)
BEFORE | AFTER INSERT | UPDATE | DELETE ON 테이블명
[FOR EACH ROW]
[WHEN(조건)]
DECLARE
-- 변수선언
...
BEGIN
...
[EXCEPTION]
-- 예외사항
END 트리거이름(영문);
예시:
-- TEST_EXAMPLE_TB
-- 컬럼 seq_num, data1, data2
CREATE OR REPLACE TRIGGER trg_tb_test01
BEFORE
INSERT ON TEST_EXAMPLE_TB
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE('트리거 테스트입니다.');
END trg_tb_test01;
-- 실행 --
INSERT INTO TEST_EXAMPLE_TB
VALUES (11, 'test123', 'test234');
-- 결과 --
-- OUTPUT
트리거 테스트입니다.
트리거 선언 시 주요 사항:
- BEFORE: INSERT, UPDATE 또는 DELETE문이 실행되기 전에 트리거가 실행
- AFTER: INSERT, UPDATE 또는 DELETE문이 실행된 후 트리거가 실행
- FOR EACH ROW: 행 트리거가 된다는 것
조건부와 DECLARE 선언부는 기존의 PL/SQL 사용 부분과 같습니다.
트리거 삭제:
DROP TRIGGER trg_tb_test01;
트리거 참고:
변경 전 컬럼 값과 변경 후 컬럼 값을 알 수 있습니다.
- :old.컬럼명
- :new.컬럼명
CREATE OR REPLACE TRIGGER trg_tb_test02
BEFORE
UPDATE ON TEST_EXAMPLE_TB
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE('변경 전 값 = ' || :OLD.data1 );
DBMS_OUTPUT.PUT_LINE('변경 후 값 = ' || :NEW.data1 );
END trg_tb_test02;
-- 실행 --
UPDATE TEST_EXAMPLE_TB
SET data1 = 'replace_text123'
WHERE SEQ_NUM = 11;
-- 결과 --
-- OUTPUT
변경 전 값 = test123
변경 후 값 = replace_text123
728x90
'Be Smart > SQL' 카테고리의 다른 글
[Dbeaver] Oracle DB 추가 시 오류, ORA-12514 리스너에 등록 되지 않았습니다. 오류 (0) | 2024.08.05 |
---|---|
[Oracle] 오라클 DB DELETE 후 Commit 한 데이터 복구 (0) | 2024.07.15 |
[Oracle] 오라클 DB에서 삭제한 데이터 복구 방법 (0) | 2024.07.09 |
[오라클] 오라클 트리거란? DML 트리거의 사용법과 관리 방법 (0) | 2024.07.04 |
[오라클] PL/SQL 패키지: 이해와 활용 방법 (0) | 2024.07.03 |
댓글