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触发器在数据表更新时自动执行某些操作,从而简化数据库操作和提高数据一致性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员潘子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值