*트리거
트리거란
오라클에서 트리거는 데이터베이스 안의 특정 상황이나
동작, 이벤트가 발생할 경우에 자동으로 실행되는 기능을 정의하는 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 |
댓글