본문 바로가기
Today I learned

12월4일

by soheemon 2019. 1. 10.

*트리거

트리거란

오라클에서 트리거는 데이터베이스 안의 특정 상황이나

동작, 이벤트가 발생할 경우에 자동으로 실행되는 기능을 정의하는 PL/SQL 서브프로그램이다.


예>어떤 테이블의 데이터를 특정 사용자가 변경하려 할 때 

해당 데이터나 사용자 기록을 확인하다던지 상황에 따라 데이터를 변경하지 못하게 막는것이 가능


-데이터와 연관된 여러 작업을 수행하기 위해 일일히 PL/SQL문 또는 서브프로그램을 실행해야 하는 번거로움을 줄일 수 있다.

-제약조건 만으로 구현이 어렵거나 불가능한 좀 더 복잡한 데이터 규칙을 정할 수 있다.

-데이터 변경과 관련된 일련의 정보를 기록 해 둘 수 있으므로 여러 사용자가 공유하는 데이터 보안성과 안정성 그리고 문제가 발생했을때 대처 능력을 높일 수 있다.


<!주의 트리거는 특정 작업 또는 이벤트 발생 이후 다른 데이터 작업을 추가로 실행하기 때문에

 무분별하게 사용하면 데이터베이스 성능을 떨어뜨리는 원인이 되므로 주의가 필요하다.>


*트리거는 테이블 뷰 스키마 데이터베이스 수준에서 다음과 같은 이벤트에 동작을 지정 할 수 있다.

<데이터 조작어 DML: INSERT, UPDATE, DELETE>

<데이터 정의어 DDL: CREATE, ALTER, DROP>

<데이터베이스 동작: SERVERERROR, LOGON, LOGOFF, STARTUP, SHUTDOWN>


*트리거가 발생할 수 있는 이벤트 종류의 구분

*INSTEAD OF 트리거: 뷰에 사용하는 DML명령어를 기점으로 동작함

단순 트리거: -트리거를 작동시킬 문장이 실행되기 전 시점

-트리거를 작동시킬 문장이 실행된 후 시점

-트리거를 작동시킬 문장이 행에 영향을 미치기 전 시점

-트리거를 작동시킬 문장이 행에 영향을 준 후 시점

복합 트리거: -단순 트리거의 여러 시점에 동작함


*DML 트리거 형식


CREATE [OR REPLACE] TRIGGER 트리거 이름

BEFORE | AFTER

INSERT | UPDATE | DELETE ON 테이블 이름 - 해당 테이블에 트리거가 작동할 DML 명령어를 작성한다.

REFERENCING OLD as old | New as new - 생략가능 DML로 변경되는 행의 변경전과 변경후 값을 참조하는데 사용

FOR EACH ROW WHEN 조건식 - DML문장에 한번만 실행할 지 DML 문장에 의해 영향받는 행별로 실행할지를 지정 (생략시 한번만 실행)

   WHEN 키워드를 함께 사용하면 DML 명령어에 영향받는 행중 트리거를 작동시킬 행을 조건식으로 지정할 수 있다.

FOLLOWS 트리거이름2, 트리거이름3 - (11g이상, 생략가능) 트리거 실행순서

ENABLE | DISABLE - (11g이상, 생략가능) 트리거 활성화 비활성화 지정 


DECLARE

선언부

BEGIN

실행부

EXCEPTION

예외 처리부

END;


*트리거 관리

트리거 정보 조회


SELECT TRIGGER_NAME, TRIGGER_TYPE, TRIGGERING_EVENT, TABLE_NAME, STATUS FROM USER_TRIGGERS;


*트리거 삭제


DROP TRIGGER 트리거 이름;


*데이터 모델링 과정


정규화를 디테일하게 하면 테이블간 JOIN이 많아진다.

그래서 뷰를 사용한다.


요구사항 분석 팁: 머리속에 있는것을 그대로 옮기지 말고, 연관된 실제 사이트에 들어가서

하나하나 기능을 분석해서 리스트화한다.

=> 실제 웹사이트를 바탕을 요구 분석을 했기때문에 실무와 비슷하게 구현 할 수 있다.

'Today I learned' 카테고리의 다른 글

반복문에서 break와 switch  (0) 2019.01.13
PL/SQL에서 변수명과 프로시저명이 같으면 안된다.  (0) 2019.01.12
1월10일  (0) 2019.01.10
1월7일  (0) 2019.01.07
1월3일  (0) 2019.01.03

댓글