加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

oracle中的触发器 insert or update or delete on table***

(2013-09-02 14:40:48)
标签:

oracle

触发器

分类: 菜鸟DBA之Oracle
-----------------------------------------------------------------------------------------------
       本文为个人笔记,仅供参考,希望对您的疑问有所帮助。欢迎转载,转载请注明出处。谢谢!
-----------------------------------------------------------------------------------------------
测试表:
create table a0902_tri(
id numeric,
sname varchar(50) not null,
remark varchar(50) null,
ctime date,
mtime date
)

CREATE OR REPLACE TRIGGER a0902_p_trigger
BEFORE INSERT OR UPDATE OR DELETE ON a0902_tri
REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW
BEGIN
    IF INSERTING THEN
        :NEW.CTIME := SYSDATE;
        :NEW.MTIME := SYSDATE;
        :NEW.REMARK :='INSERT INIT';
    ELSIF UPDATING then
        :NEW.MTIME := SYSDATE;
        :NEW.REMARK :=TO_CHAR(SYSDATE,'YYYYMMDD')||'SYS EDIT';
    ELSE
        NULL;
    END IF;
    EXCEPTION
      WHEN OTHERS THEN
        NULL;
END;


INSERT INTO a0902_tri(ID,SNAME) VALUES (1,'AA');
INSERT INTO a0902_tri(ID,SNAME,REMARK,CTIME) VALUES (2,'AA','初始化',sysdate-1);

select * from a0902_tri;
http://s11/mw690/4c197d42tx6CkRlYYVc9a&690insert or update or delete on table***" TITLE="oracle中的触发器 insert or update or delete on table***" />

--触发器insert 部分正确。
update a0902_tri
set id=999,remark='2013-09-02 modify'
where id=1

select * from a0902_tri;
http://s15/mw690/4c197d42tx6CkRmNTtQ4e&690insert or update or delete on table***" TITLE="oracle中的触发器 insert or update or delete on table***" />

--触发器update部分正确。

delete from a0902_tri
where id=2
select * from a0902_tri;
http://s1/mw690/4c197d42tx6CkRpUkUM40&690insert or update or delete on table***" TITLE="oracle中的触发器 insert or update or delete on table***" />


--触发器走null部分,执行delete。

修改触发器:
CREATE OR REPLACE TRIGGER a0902_p_trigger
BEFORE INSERT OR UPDATE OR DELETE ON a0902_tri
REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW
BEGIN
    IF INSERTING THEN
        :NEW.CTIME := SYSDATE;
        :NEW.MTIME := SYSDATE;
        :NEW.REMARK :='INSERT INIT';
    ELSIF UPDATING then
        :NEW.MTIME := SYSDATE;
        :NEW.REMARK :=TO_CHAR(SYSDATE,'YYYYMMDD')||'SYS EDIT';
    ELSIF DELETING then
        INSERT INTO a0902_tri(ID,SNAME)
        VALUES (:OLD.ID*100,:OLD.SNAME||'DELETE...');
    ELSE
        NULL;
    END IF;
    EXCEPTION
      WHEN OTHERS THEN
        NULL;
END;

SELECT * FROM a0902_tri;
http://s10/mw690/4c197d42tx6CkRrUIXv69&690insert or update or delete on table***" TITLE="oracle中的触发器 insert or update or delete on table***" />

INSERT INTO a0902_tri(ID,SNAME) VALUES (3,'BB');
INSERT INTO a0902_tri(ID,SNAME,REMARK) VALUES (4,'CC','IIINSERT');
INSERT INTO a0902_tri(ID,SNAME,MTIME) VALUES (5,'DD',SYSDATE-10);
SELECT * FROM a0902_tri;
http://s7/mw690/4c197d42tx6CkRsNwXQ96&690insert or update or delete on table***" TITLE="oracle中的触发器 insert or update or delete on table***" />
DELETE FROM a0902_tri
WHERE ID=5

SELECT * FROM a0902_tri;
http://s16/mw690/4c197d42tx6CkRuaoO36f&690insert or update or delete on table***" TITLE="oracle中的触发器 insert or update or delete on table***" />

增表,修改触发器
create table a0902_tri_del(
id numeric,
sname varchar(50) not null,
remark varchar(50) null,
ctime date,
mtime date
)

CREATE OR REPLACE TRIGGER a0902_p_trigger
BEFORE INSERT OR UPDATE OR DELETE ON a0902_tri
REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW
BEGIN
    IF INSERTING THEN
        :NEW.CTIME := SYSDATE;
        :NEW.MTIME := SYSDATE;
        :NEW.REMARK :='INSERT INIT';
    ELSIF UPDATING then
        :NEW.MTIME := SYSDATE;
        :NEW.REMARK :=TO_CHAR(SYSDATE,'YYYYMMDD')||'SYS EDIT';
    ELSIF DELETING then
        INSERT INTO a0902_tri_del(id,sname,remark,ctime,mtime)
        VALUES (:OLD.ID,:OLD.SNAME,to_char(sysdate,'yyyymmdd')||'DELETED',sysdate,sysdate);
    ELSE
        NULL;
    END IF;
    EXCEPTION
      WHEN OTHERS THEN
        NULL;
END;

SELECT * FROM a0902_tri;
http://s6/mw690/4c197d42tx6CkRvbqdf95&690insert or update or delete on table***" TITLE="oracle中的触发器 insert or update or delete on table***" />

delete from a0902_tri
where id=3

SELECT * FROM a0902_tri;
http://s15/mw690/4c197d42tx6CkRvOfE2ae&690insert or update or delete on table***" TITLE="oracle中的触发器 insert or update or delete on table***" />

SELECT * FROM a0902_tri_del;
http://s8/mw690/4c197d42tx6CkRwppEXe7&690insert or update or delete on table***" TITLE="oracle中的触发器 insert or update or delete on table***" />

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有