오라클 트리거 insert 예제

행 트리거 의 트리거 본문 내에서 PL/SQL 코드 및 SQL 문은 트리거링 문의 영향을 받는 현재 행의 이전 및 새 열 값에 액세스할 수 있습니다. 수정중인 테이블의 모든 열에 대해 두 개의 상관 이름이 있습니다. 트리거링 문의 유형에 따라 특정 상관 관계 이름에는 아무의미가 없습니다. 트리거는 일반적으로 테이블 데이터에 대한 복잡한 보안 권한을 적용하는 데 사용됩니다. 트리거만 사용하여 Oracle Database와 함께 제공되는 데이터베이스 보안 기능을 사용하여 정의할 수 없는 복잡한 보안 권한을 적용합니다. 예를 들어 트리거는 주말, 공휴일 및 비근무 시간 동안 Emp_tab 테이블의 급여 데이터에 대한 업데이트를 금지할 수 있습니다. 트리거 본문에 다른 트리거가 발생 하면 트리거가 계단식 이라고 합니다. Oracle Database를 사용하면 한 번에 최대 32개의 트리거를 계단식으로 연결할 수 있습니다. 그러나 트리거의 모든 실행에 대해 커서를 열어야 하기 때문에 초기화 매개 변수 OPEN_CURSORS를 사용하여 트리거 캐스케이드 수를 효과적으로 제한할 수 있습니다. 업데이트되는 각 행에 대해 트리거를 한 번 발생시, 각각의 경우 새 급여, 이전 급여 및 차이를 인쇄합니다.

다음과 같은 값을 테이블 test1에 삽입한다고 가정합니다. 두 번째 INSERT에서 CREATED_BY의 값은 트리거에 의해 현재 로그인된 사용자 “HR”로 대체되는 “XYZ”입니다. 2.5 테스트 트리거 발생 오류 – 사망 날짜는 미래 날짜가 될 수 없습니다. UPDATE 또는 DELETE 문이 동시 업데이트와의 충돌을 감지하면 Oracle Database는 SAVEPOINT에 대한 투명한 롤백을 수행하고 업데이트를 다시 시작합니다. 문이 성공적으로 완료되기 전에 여러 번 발생할 수 있습니다. 명령문이 다시 시작될 때마다 BEFORE 문 트리거가 다시 발생합니다. savepoint에 대한 롤백은 트리거에서 참조되는 패키지 변수에 대한 변경 내용을 취소하지 않습니다. 패키지에는 이 상황을 감지하는 카운터 변수가 포함되어야 합니다.

다음 섹션에서는 이 예제를 사용하여 트리거의 일부를 지정하는 방법을 보여 줍니다. 개체에 두 개 이상의 트리거를 만들 수 있습니다. 이벤트가 두 개 이상의 트리거를 발생하면 순서가 정의되지 않으며 특정 순서로 트리거가 발생되는 트리거에 의존해서는 안 됩니다. 이 트리거는 자체 참조 테이블(기본/고유 키와 외래 키가 있는 테이블)에서는 작동하지 않습니다. 또한 이 트리거는 트리거가 순환하는 것을 허용하지 않습니다(예: A는 A를 발사합니다). DDL 문은 트리거 본문에서 허용되지 않습니다. 또한 트리거에는 트랜잭션 제어 문이 허용되지 않습니다. 롤백, 커밋 및 저장 포인트를 사용할 수 없습니다. 시스템 트리거의 경우 {CREATE/ALTER/DROP} 테이블 문및 ALTER…COMPILE가 허용됩니다. 이 문제를 방지하려면 기본 키를 변경하고 기존 기본 키 값을 다시 사용하는 p로 하는 multirow 업데이트를 금지해야 합니다.

또한 어떤 외래 키 값이 이미 업데이트되었는지 추적한 다음 행이 두 번 업데이트되지 않도록 트리거를 수정하여 해결할 수도 있습니다. 선언적 참조 무결성 제약 조건은 분산 데이터베이스의 다른 노드의 테이블 간에 지원되지 않으므로 원격 노드에 액세스하는 트리거에는 변경 테이블 제한이 적용되지 않습니다.

Este post foi publicado em Sem categoria em por .