Oracle触发器使用

--:NEW 和:OLD使用方法和意义,new 只出现在insert和update时,old只出现在update和delete时。在insert时new表示新插入的行数据,update时new表示要替换的新数据、old表示要被更改的原来的数据行,delete时old表示要被删除的数据。

--:new,:old只能用在行级触发器

--创建触发器

CREATE OR REPLACE TRIGGER au_tt_productinfo

AFTER  INSERT OR UPDATE OR DELETE ON tt_productinfo

FOR EACH ROW --行级触发器 , 不加则为表级触发器 (每更行一行数据都会调用异常触发器)

--when (new_value.department_id<>80 )
--限制不是必须的。此例表示如果列department_id不等于80的时候,触发器就会执行。

DECLARE
    -- local variables here uid varchar2(10);
    --SELECT seq_trg_id.NEXTVAL INTO :NEW.e_id FROM dual; 获取最新序列值

BEGIN

UPDATE tt_cidsinfo tc SET tc.cids_name ='wowowo';

      IF  inserting THEN  --插入操作

          Dbms_output.put_line('inserting');

      ELSIF   updating THEN --更新操作

         -- Dbms_output.put_line('updating');

         -- Dbms_output.put_line(100);

        -- Dbms_output.put_line(:OLD.sep_name);

            IF :OLD.seque_no=1 THEN
              RAISE_APPLICATION_ERROR(-20001, '序号不能等于1');  --抛出异常  -20000 到 -20999 之间
          ELSE
               INSERT INTO tt_cidsinfo(cids_id,cids_name) VALUES(101,:OLD.sep_name);  --通过:new 或则:old 来获取触发器作用表的值
          END IF;

    ELSIF deleting THEN  --删除操作

           Dbms_output.put_line('deleting');

           Dbms_output.put_line(:OLD.sep_name);

   END IF;

END;

posted @ 2011-01-24 10:45    阅读(958)  评论(0编辑  收藏  举报