简单触发器常用备忘

    技术2024-04-15  11

    1.触发器代码的大小不能超过32K,如果确实要在触发器中使用大量的代码,应该先建立存储过程,然后再触发器中使用CALL语句调用存储过程。

    2.触发器只能使用SELECT,INSERT,UPDATE,DELETE不能包含CREATE,ALERT,DROPCOMMIT,ROLLBACK,SAVEPOINT

    3.一个表上多个触发器的执行顺序:BEFORE语句级触发器-(BEFORE行触发器-AFTER行触发器)-AFTER语句触发器。括号中的可循环。

    4.语句级触发器样例:

       --语句级触发器,多用途。

       CREATE OR REPLACE TRIGGER EMP_TRI

       BEFORE(AFTER) INSERT OR UPDATE OR DELETE ON EMP

       DECLARE

       BEGIN

         CASE

          WHEN INSERTING THEN --表示是插入

          --CONTENTS1;

          WHEN UPDATING THEN --表示是更新

          --CONTENTS2;

          WHEN DELETING THEN --表示是删除

          --CONTENTS3;

         END CASE;

       END;

    5.行触发器

       --行触发器,每一行都执行该触发器一次。

       CREATE OR REPLACE TRIGGER EMP_TRI

       BEFORE(AFTER) INSERT OR UPDATE OR DELETE ON EMP

       FOR EACH ROW --不同点一

       DECLARE

       BEGIN

         :NEW.(:OLD.字段) := 1; --不同点二

       END;

    6.在给这张表做操作时,触发器代码不能从触发器所对应的基表中读取数据。例子:

      --下边的触发器,可以成功编译,但是在触发的时候会有问题。其实这是一个死循环。

      CREATE OR REPLACE TRIGGER EMP_TRI

      BEFORE(AFTER) INSERT OR UPDATE OR DELETE ON EMP

      FOR EACH ROW

      DECLARE

        V VARCHAR2(10);

      BEGIN

         SELECT NAME INTO V FROM EMP WHERE ID = :NEW.ID(:OLD.ID);

      END;

    7.抛出异常:raise_application_error(数字,'提示')

    8.限制行触发器,因为行触发器是每一行执行一次触发器,所以可以根据需要限制。语句级因为执行一次,所以不需要。样例:

       CERATE OR REPLACE TRIGGER EMP_TRI

       BEFORE(AFTER) INSERT OR UPDATE OR DELETE ON EMP

       FOR EACH ROW

       WHEN (:OLD.JOB = 'SALESMAN') --当满足该条件才执行下述操作。

       DECLARE

       BEGIN

        --CONTENTS;

       END;

    9.SELECT D.trigger_name FROM DBA_TRIGGERS D WHERE D.table_name = '表名';--用来查询TRIGGER

    最新回复(0)