Oracle 触发器案例

Oracle 触发器案例

CREATE OR REPLACE TRIGGER TEST_TRIGGER
 AFTER update ONFOR EACH ROW --语句级触发,即每一行触发一次

declare
aname varchar2(20);
id_seq int;
new_httpPort varchar2(5);
media_id int;
BEGIN
  new_httpPort := :new.httpserverport;
  if (:new.httpserverport = '881') then
     new_httpPort := '881\';
  end if;
  if (:old.evidence_ref is null and :new.evidence_ref is not null) or :old.evidence_ref <> :new.evidence_ref then
     select zjipst110.t_evidence_seq.nextval@jb110 into id_seq from dual;
     select realname into aname from 用户表 where username=:old.username;
     INSERT INTO 表前缀.表名@用户(id,jjdbh,cjdbh,scrxm,wjmc,ftplj,SCSJ,zjlxbh,ZJLXMC,insert_time)
     VALUES (id_seq,:new.evidence_ref,:new.cjdbh,aname,substr(:new.ftpserverpath,-19),'http://ip:端口/index.php/MediaFrame/download?id='||:new.MEDIAGROUP,:new.uploaddatetime,'zfjly',substr(:new.ftpserverpath,-3),sysdate); --:old代表旧值
  end if;
END;

触发器详解:

触发器名称: TEST_TRIGGER

触发条件: 更新表后

触发级别: 语句级(对每一行数据触发一次)

在Oracle数据库中,触发器是一种特殊的存储过程,它自动在数据库表上执行指定的操作。以下是一个关于如何使用Oracle触发器的案例。

当我们在指定的表上执行更新操作时,这个触发器会自动被激活。对于每一行数据,它都会执行以下操作:

获取新值 new.httpserverport,并检查是否等于’881’。如果是,则将其设置为’881’。
检查old.evidence_ref和new.evidence_ref的值。如果旧值是null而新值不是null,或者两者的值不相等,则执行以下操作:

a. 从序列 表前缀.序列名称.nextval@用户 获取下一个值,并将其存储在变量id_seq中。

b.从用户表中选择与旧值:old.username匹配的realname,并将其存储在变量aname中。

c.向zjipst110.T_EVIDENCE@jb110表中插入一行数据,包括从序列获取的ID、:new.evidence_ref、:new.cjdbh、aname、:new.ftpserverpath的最后19个字符、以及由URL和:new.MEDIAGROUP组成的下载链接等其他字段的值。

通过这种方式,我们可以利用Oracle触发器在数据表更新时自动执行某些操作,从而简化数据库操作和提高数据一致性。

你可能感兴趣的:(Oracle,oracle,数据库,sql)