[DM] 다몽 데이터베이스에서의 트리거 실례

8981 단어 데이터베이스
테스트 데이터 세트 만들기
DROP TABLE IF EXISTS TEST;
CREATE TABLE TEST(
	ID INT IDENTITY(1,1),
	NAME VARCHAR(50),
	CITY VARCHAR(50)
);
INSERT INTO TEST(NAME,CITY) VALUES('  ','  '),('  ','  '),('  ','  ');

인스턴스 1: 수정 작업에 대한 프롬프트
절차.
CREATE OR REPLACE TRIGGER TRG
AFTER UPDATE OF NAME ON TEST
BEGIN
	PRINT '     ';
END;

결실
SQL> CREATE OR REPLACE TRIGGER TRG
2   AFTER UPDATE OF NAME ON TEST
3   BEGIN
4       PRINT '     ';
5   END;
6   /
     
    : 5.871(  ).    :2006.
SQL> UPDATE TEST SET NAME='  ' WHERE ID='3';
     

     1

    : 0.851(  ).    :2007.

주의표의 정의와 트리거의 정의의 선후 순서입니다. 트리거를 만든 후에 목표표를 재구성하면 트리거는 효력이 발생하지 않습니다.
실례2: 모듈 레벨 트리거와 문장 레벨 트리거, 옛 값의 새 값 인쇄
절차.
CREATE OR REPLACE TRIGGER TRG
AFTER UPDATE OF NAME ON TEST
FOR EACH ROW							--        
BEGIN
	PRINT '     ,   '||:OLD.NAME||',   '||:NEW.NAME;	
END;

--  :':OLD'    ,':NEW'    。          ,       "FOR EACH STATEMENT"  ,           。

결실
SQL> CREATE OR REPLACE TRIGGER TRG
2   AFTER UPDATE OF NAME ON TEST
3   FOR EACH ROW						
4   BEGIN
5       PRINT '     ,   '||:OLD.NAME||',   '||:NEW.NAME;  
6   END;
7   /
     
    : 55.198(  ).    :2008.
SQL> UPDATE TEST SET NAME='  ' WHERE ID='3';
     ,     ,     

     1

    : 14.871(  ).    :2009.

인스턴스 3: INSTEAD OF 유형 트리거, 대체 동작
데이터 세트 만들기: V1 뷰
DROP TABLE IF EXISTS TEST;
CREATE TABLE TEST(
	ID INT IDENTITY(1,1),
	NAME VARCHAR(50),
	CITY VARCHAR(50)
);
INSERT INTO TEST(NAME,CITY) VALUES('  ','  '),('  ','  '),('  ','  ');
CREATE VIEW V1 AS SELECT * FROM TEST;

트리거를 만들다
CREATE OR REPLACE TRIGGER TRI
INSTEAD OF UPDATE ON V1
BEGIN
	INSERT INTO TEST(NAME,CITY) VALUES('  ','  ');
END;

효과
SQL> UPDATE V1 SET CITY ='  ' WHERE ID=1;
     1

    : 33.769(  ).    :2019.
SQL> SELECT * FROM V1;

         ID          NAME CITY
---------- ----------- ---- ----
1          1                
2          2                
3          3                
4          4                

    : 0.548(  ).    :2020.

INSTEAD OF 트리거는 뷰에만 유효하며 기본 테이블은 변경되지 않습니다.
실례4: 행급 트리거와 문장급 트리거 비교
위의 테스트 데이터를 연결하다
절차.
--      
CREATE OR REPLACE TRIGGER TRI_1
AFTER UPDATE ON TEST
FOR EACH STATEMENT
BEGIN
	PRINT '     ';
END;
--     
CREATE OR REPLACE TRIGGER TRI_2
AFTER UPDATE ON TEST
FOR EACH ROW					--       
BEGIN
	PRINT '    ';
END;

효과
SQL> UPDATE TEST SET CITY='  ' WHERE ID IN (1,2,3,4,5);
    
    
    
    
    
     

     5

    : 1.339(  ).    :2029.

AFTER/BEFORE 트리거는 뷰에서 생성할 수 없습니다.
INSTEAD 트리거는 행 레벨만 가능하며 변환도 유효하지 않습니다.
실행 효과로 볼 때, 문장급 촉발은 한 번만 촉발하고, 행급 촉발 횟수는 영향 행수에 따라 정한다

좋은 웹페이지 즐겨찾기