triggers pl sql tutorial with example programs
PL SQL의 트리거, 유형, 사용법 및 장점에 대해 모두 알아보십시오.
에서 PL SQL 트랜잭션 튜토리얼 PL / SQL 시리즈 , 우리는 COMMIT, ROLLBACK 및 SAVEPOINTS 문에 대해 배웠습니다.
이 기사에서는 PL SQL의 트리거와 그 장점, 유형 및 사용법을 살펴 봅니다. 예제 프로그램을 사용하여 PL / SQL 트리거를 생성, 트리거, 활성화 및 비활성화하는 방법에 대해 설명합니다.
토론부터 시작하겠습니다 !!
학습 내용 :
PL / SQL의 트리거
기본적으로 또는 일부 이벤트에 의해 실행되는 저장 프로그램을 트리거라고합니다.
다음과 같은 상황으로 인해 트리거가 실행됩니다.
- DROP, ALTER 또는 CREATE와 같은 DDL (데이터 정의 언어) 문 사용.
- UPDATE, INSERT 또는 DELETE와 같은 DML (Data Manipulation Language) 문을 사용합니다.
- SHUTDOWN, STARTUP, LOGOFF 및 LOGON과 같은 데이터베이스 작업에 의해.
이벤트가 연결된 스키마, 뷰 또는 데이터베이스에 트리거를 설정할 수 있습니다.
트리거의 장점
다음은 다음과 같습니다.
- 참조 무결성을 적용하는 기능.
- 모니터링 능력.
- 액세스 테이블에 대한 데이터를 기록하고 보관하는 기능.
- 유효하지 않은 거래를 중지하는 기능.
- 보안 기능을 시행하는 능력.
- 기본적으로 파생 된 열 값을 생성하는 기능.
트리거 사용
다음은 다음과 같습니다.
- 부적절한 거래를 방지합니다.
- 테이블 사용에 대한 정보를 축적합니다.
- 중요한 정보를 모니터링합니다.
PL / SQL의 트리거 유형
트리거는 매개 변수에 따라 분류 할 수 있습니다. 트리거 유형은 다음과 같습니다.
# 1) 트리거 수준의 분류.
- ROW 레벨 트리거 : DML 문에 의해 업데이트 된 각 레코드에 대해 실행됩니다.
- STATEMENT 레벨 트리거 : 이벤트 문에 의해 한 번만 실행됩니다.
# 2) 트리거 타이밍에 대한 분류.
- 트리거 전 : 특정 이벤트가 발생하기 전에 실행됩니다.
- 트리거 후 : 발생한 특정 이벤트 이후에 실행됩니다.
- INSTEAD OF 트리거 : 특수 유형의 트리거이며 DML 문에 의해 업데이트 된 각 레코드에 대해 실행됩니다.
# 3) 트리거 이벤트의 분류.
- DML 트리거 : UPDATE, INSERT 또는 DELETE와 같은 DML 이벤트가 수행되면 실행됩니다.
- DDL 트리거 : DROP, ALTER 또는 CREATE와 같은 DDL 이벤트가 수행되면 실행됩니다.
- DATABASE 트리거 : SHUTDOWN, STARTUP, LOGOFF 및 LOGON과 같은 데이터베이스 이벤트가 발생하면 실행됩니다.
트리거 만들기
트리거 생성을위한 구문 :
CREATE (OR REPLACE ) TRIGGER trigger_n BEFORE DELETE (OF column_n) ON table_n (REFERENCING OLD AS o NEW AS n) (FOR EACH ROW) WHEN (condition) DECLARE <> BEGIN < > EXCEPTION <> END;
여기,
- (OR REPLACE) TRIGGER 생성 trigger_n – 이름이 trigger_n 인 트리거를 생성, 교체 또는 업데이트하기위한 것입니다.
- 이후 – 트리거가 실행되는 시간을 결정하기위한 것입니다. INSTEAD OF는 뷰가있는 트리거를 만들기위한 것입니다.
- 삭제 – DML 작업을 실행하기위한 것입니다.
- (OF column_n) – 수정할 컬럼 이름을 언급하기위한 것입니다.
- (ON table_n) – 트리거에 연결된 테이블 이름을 언급하기위한 것입니다.
- (오래된 것을 n으로 새로운 것으로 참조) – 이것은 UPDATE, INSERT 또는 DELETE와 같은 DML 문에 의해 이전 값과 새 값을 참조하기위한 것입니다.
- (각 행에 대해) – 이는 행 수준 트리거를 결정합니다. 즉, 수정 된 각 행에 대해 트리거가 실행되고, 그렇지 않으면 SQL 문이 실행될 때 트리거가 한 번만 실행되며,이를 테이블 수준 트리거라고합니다.
- WHEN (조건) – 이것은 트리거가 실행될 행에 대한 조건을 제공합니다. 이것은 행 수준 트리거에만 적용됩니다.
이름이 지정된 테이블을 다시 고려해 보겠습니다. 학생 .
이제 해당 테이블에서 UPDATE, INSERT 또는 DELETE와 같은 DML 문에 의해 실행되는 STUDENT 테이블에 대한 행 수준 트리거를 생성 해 보겠습니다. 트리거는 현재 값과 이전 값 사이의 연령 차이를 계산하고 표시합니다.
트리거 생성을위한 코드 구현 :
CREATE OR REPLACE TRIGGER age_changes BEFORE DELETE OR INSERT OR UPDATE ON student FOR EACH ROW WHEN (NEW.CODE > 0) DECLARE age_diff number; BEGIN age_diff := :NEW.age - :OLD.age; dbms_output.put_line ('Prevoius age: ' || : OLD.age); dbms_output.put_line ('Current age: ' || : NEW.age); dbms_output.put_line ('Age difference: ' || age_diff); END; /
위 코드의 출력 :
위의 코드에는 몇 가지 중요한 특성이 있습니다. 아래에 나열되어 있습니다.
- 테이블 레벨 트리거의 경우 OLD 및 NEW 주소를 사용할 수 없습니다. 레코드 레벨 트리거에 이러한 참조를 사용할 수 있습니다.
- 동일한 트리거에 다른 쿼리를 적용하려면 이전 수정 사항이 제대로 적용된 후에 만 테이블을 다시 수정할 수있는 트리거로 AFTER 키워드를 사용해야합니다.
- 위에서 설명한 트리거는 테이블에 대한 DELETE, UPDATE 또는 INSERT 작업 전에 실행됩니다. 그러나 단일 작업에서 실행되는 트리거도 설계 할 수 있습니다 ( 예를 들면 테이블에 대한 INSERT 연산의 도움으로 레코드가 삽입 될 때마다 트리거를 실행하는 AFTER INSERT).
PL SQL에서 트리거 트리거
위의 트리거를 실행하려면 테이블에서 DELETE, INSERT 또는 UPDATE와 같은 DML 작업을 수행해야합니다. 아래 쿼리를 사용하여 Student 테이블에 몇 가지 값을 다시 삽입하겠습니다.
INSERT INTO STUDENT VALUES (4, 'MARY', 16, 97);
Student 테이블에서 INSERT 작업이 완료되면 트리거가 age_changes 실행됩니다.
쿼리 코드의 출력 :
새 레코드가 생성되고 이전 연령을 사용할 수 없기 때문에 이전 연령과 나이 차이 위의 출력에서 계산은 null로 나타납니다.
이제 우리 아래 쿼리를 사용하여 UPDATE 문으로 레코드를 수정하십시오.
UPDATE student SET age = age + 1 WHERE code = 7;
Student 테이블에서 UPDATE 작업이 완료되면 트리거가 age_changes 실행됩니다.
위 쿼리의 출력 :
NEW 및 OLD 조항
새 절은 트리거 실행을 위해 테이블 열의 새 값을 저장하는 데 사용됩니다. 레코드 레벨 트리거에 사용됩니다. 이전 절은 트리거 실행을 위해 테이블의 열에 대한 이전 값을 저장하는 데 사용됩니다. 레코드 레벨 트리거에도 사용됩니다.
따라서 new 및 old 절은 트리거 본문에서 새 값과 이전 값을 보유하고 참조하는 데 사용됩니다.
복합 트리거
복합 트리거는 트리거 본문 내의 모든 타이밍 지점에 대한 작업을 정의하는 데 사용됩니다. 하나의 트리거 본문 내에서 다른 타이밍에 모든 작업을 병합 할 수 있습니다.
다양한 타이밍 포인트는 다음과 같습니다.
- STATEMENT 수준 이후
- 행 수준 이전
- 행 수준 이후
- 진술 전 수준
트리거 비활성화 및 활성화
DDL 문 ALTER를 사용하여 트리거를 활성화 및 비활성화 할 수 있습니다.
통사론:
ALTER TRIGGER trigger_n (ENABLE|DISABLE);
여기서 trigger_n은 활성화하거나 비활성화 할 트리거의 이름입니다.
이제 아래 쿼리를 사용하여 트리거를 비활성화하겠습니다.
ALTER TRIGGER STUDENT_DETAILS DISABLE;
쿼리 코드의 출력 :
이제 아래 쿼리를 사용하여 동일한 트리거를 활성화하겠습니다.
ALTER TRIGGER STUDENT_DETAILS ENABLE;
쿼리 코드의 출력 :
자주 묻는 질문과 답변
Q # 1) PL SQL에는 몇 가지 유형의 트리거가 존재합니까?
대답: PL / SQL에는 두 가지 유형의 트리거가 있습니다. 행 수준 트리거 및 문 수준 트리거입니다.
Q # 2) 이전 및 새 한정자를 사용하는 트리거 유형은 무엇입니까?
다음 중 가장 인기있는 테스트 프레임 워크 중 하나는 무엇입니까?
대답: 이전 및 새 규정자는 행 레벨 트리거에서만 사용할 수 있습니다. 문 수준 트리거와 호환되지 않습니다.
Q # 3) 새 트리거와 이전 트리거의 차이점은 무엇입니까?
대답: 새 트리거는 레코드 개체의 새 버전 목록을 제공합니다. 이전 트리거는 레코드 개체의 이전 버전 목록을 제공합니다.
Q # 4) PL SQL에서 행 수준 트리거는 무엇입니까?
대답: 행 레벨 트리거는 이벤트로 인해 행에 대해 한 번만 트리거됩니다. 예를 들면 삭제가 테이블에 대한 트리거링 이벤트로 간주되면 delete 문이 두 행에 영향을 미치고 트리거가 두 번 실행됩니다.
Q # 5) 트리거 란 무엇입니까? 예를 들어 설명하십시오.
대답: 트리거는 데이터베이스에서 인시던트가 발생하면 기본적으로 실행되는 저장 프로 시저입니다. 예를 들면 행이 테이블에 삽입되거나 테이블의 일부 값을 수정하는 경우.
Q # 6) 이후 트리거는 무엇입니까?
대답: 이후 트리거는 DML 문 실행 후 데이터베이스에 대한 커밋 전에 실행됩니다. 또한 작업을 롤백 할 수 있습니다.
결론
이 튜토리얼에서는 프로그래밍 중에 사용하는 데 필수적인 PL SQL의 트리거에 대한 몇 가지 기본 개념을 논의했습니다. 아래에 나열된 다음 주제를 다루었습니다.
- 트리거.
- 트리거 유형.
- 트리거에 대한 다양한 작업.