본문 바로가기
IT 자료

DB2 트리거 예제

by 성곤 2015. 7. 28.
반응형





출처 : IBM knowledgecenter




임시 트리거 작성(CREATE TRIGGER 명령)

CREATE TRIGGER 명령을 사용하면 지정된 빈도로 실행되는 임시 트리거를 작성할 수 있습니다.
구문

CREATE [ OR REPLACE ] TRIGGER trigger_name
 GROUP group_name
 [ DEBUG { TRUE | FALSE } ]
 [ ENABLED { TRUE | FALSE } ]
 PRIORITY integer
 [ COMMENT 'comment_string'
 EVERY integer { HOURS | MINUTES | SECONDS }
 [ EVALUATE SELECT_cmd BIND AS variable_name ]
 [ WHEN condition ]
 [ DECLARE variable_declaration ]
BEGIN
  trigger_action
END;

트리거가 작성하려는 것과 동일한 이름으로 이미 존재하는 가능성이 있는 경우, 선택사항인 OR REPLACE 키워드를 사용하십시오. 트리거가 존재하는 경우, 작성 중인 것으로 대체됩니다. 트리거가 존재하지 않는 경우 새 것이 작성됩니다.

trigger_name 값은 ObjectServer 내에서 유일하고 ObjectServer 이름 지정 규칙을 준수해야 합니다.

group_name 값은 CREATE TRIGGER GROUP 명령을 사용하여 이미 작성된 트리거 그룹이 될 수 있습니다.

DEBUG를 TRUE로 설정하면 메시지 레벨이 debug로 설정된 경우 디버깅 정보가 ObjectServer 메시지 로그로 전송됩니다.

ENABLED가 TRUE로 설정된 경우, 연관된 인시던트가 발생하면 트리거가 실행됩니다. 그렇지 않으면 인시던트가 발생해도 트리거가 실행되지 않습니다.

하나 이상의 트리거가 동일한 인시던트와 연관된 경우, 트리거의 PRIORITY가 ObjectServer가 트리거를 실행하는 순서를 정합니다. 우선순위는 1~20의 범위일 수 있습니다. 수를 낮추고 우선순위를 높여 우선순위가 2인 트리거가 우선순위가 3인 트리거보다 먼저 실행됩니다. 이러한 트리거 실행이 결정되지 않은 동일한 인시던트와 순서로 인해 여러 개의 동일한 우선순위의 트리거가 실행됩니다.

선택사항인 COMMENT 키워드를 사용하여 트리거에 대한 명령(comment_string)을 추가하십시오.

임시 트리거 내에서 트리거 실행 빈도를 지정해야 합니다. integer 값(초(기본 시간 단위), 분 또는 시간)을 지정하십시오.

선택적 EVALUATE 절을 사용하면 trigger_action에서 처리될 단일 SELECT 문에서 임시 결과 세트를 빌드할 수 있습니다. SELECT 문에는 ORDER BY 절이 포함될 수 없습니다.
참고: EVALUATE 절은 SELECT 문에 포함된 테이블을 데이터베이스 이름으로 완전히 규정해야 합니다. 예를 들어, 다음 구문은 올바르지 않은 것으로 간주됩니다. evaluate select Node from status... 올바른 구문은 다음과 같습니다. evaluate select Node from alerts.status...

EVALUATE 절은 대부분의 경우 FOR EACH ROW 절로 바꿀 수 있습니다. GROUP BY 절이 필요할 때에만 EVALUTE 절을 사용하십시오.

트리거 조치를 실행하기 전에 선택사항인 WHEN 절을 사용하여 특정 condition에 대하여 테스트하십시오. 조건이 충족되지 않은 경우, 트리거 조치가 실행되지 않습니다.

트리거 본문에서 사용하기 위한 로컬 트리거 변수를 선택적으로 선언할 수 있습니다. 이러한 변수가 선언되고 프로시저 변수와 동일한 방법으로 사용됩니다. 그러나 트리거 변수가 정적이어서 트리거를 실행할 때마다 값을 유지합니다.




예제

다음 임시 트리거는 alerts.status 테이블에서 지난 2분 이내에 수정되지 않은 비어 있는 모든 행(Severity = 0)을 삭제합니다.

create trigger DeleteClears
group my_triggers
priority 1
every 60 seconds
begin
      delete from alerts.status where Severity = 0
            and StateChange < (getdate - 120);
end;


===========================================


근데 왜 나는 안되는 걸까;;


반응형

'IT 자료' 카테고리의 다른 글

ajax에서 form양식 보낼때  (0) 2015.07.30
html의 select의 value와 text 가져오는 방법  (0) 2015.07.30
DB2 트랜젝션 로그 확인하기  (0) 2015.07.23
DB2 메모리 사용 현황  (0) 2015.07.21
[DB2] sqlstate=40001 reason code 68  (0) 2015.06.18