触发器

CREATE OR REPLACE TRIGGER trg_quote_otherArea_to_list
before insert or delete or update of modify_date on tab_quote_other_area
for each row
declare
integrity_error exception;
errno integer;
errmsg char(200);
str varchar(2000);
begin

if inserting then
--取序列号
begin
IF :new.other_area_id is null or :new.other_area_id=0 THEN
select sequence_other_area.nextval INTO :new.other_area_id from dual;
END IF;
exception
when integrity_error then raise_application_error(errno, errmsg);
end;

if :new.other_area_site_code is not null then
insert into tab_quote_other_list
(guid,other_area_id ,use_site_code ,fee_type_code ,other_site_code ,modify_date)
select sys_guid(),:new.other_area_id,:new.use_site_code,:new.fee_type_code,
substr(other_area_site,
instr(other_area_site, ';', 1, rownum) + 1,
instr(other_area_site, ';', 1, rownum + 1) -
instr(other_area_site, ';', 1, rownum) - 1),sysdate
from (select :new.other_area_site_code as other_area_site from dual)
--正则表达式查找";"的个数
connect by rownum < length(regexp_replace(other_area_site, '[^;]',''));
--函数替换(数据量小)translate(string,from_str,to_str),同时比较string和from_str
--字符串中的每个字符,存在不存在to_str字符,即从string中剔除掉
--connect by rownum < length(translate(other_area_site,';' || other_area_site,';'));
end if;
elsif deleting then
if :old.other_area_site_code is not null then
delete from tab_quote_other_list where other_area_id = :old.other_area_id;
end if;
else
if nvl(:old.modify_date,to_date('1899-1-1 00:00:00', 'yyyy-mm-dd hh24:mi:ss')) <>
nvl(:new.modify_date,to_date('1899-1-1 00:00:00', 'yyyy-mm-dd hh24:mi:ss')) then

if :old.other_area_site_code is not null then
delete from tab_quote_other_list where other_area_id = :old.other_area_id;
end if;
if :new.other_area_site_code is not null then
insert into tab_quote_other_list
(guid,other_area_id ,use_site_code ,fee_type_code ,other_site_code ,modify_date)
select sys_guid(),:new.other_area_id,:new.use_site_code,:new.fee_type_code,
substr(other_area_site,
instr(other_area_site, ';', 1, rownum) + 1,
instr(other_area_site, ';', 1, rownum + 1) -
instr(other_area_site, ';', 1, rownum) - 1),
sysdate
from (select :new.other_area_site_code as other_area_site from dual)
connect by rownum < length(translate(other_area_site,';' || other_area_site,';'));
end if;

end if;
end if;
end trg_quote_otherArea_to_list;

转载于:https://www.cnblogs.com/yangpeng-jingjing/p/9081174.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值