标签:重复数据 添加 ace 完整 rom csp tab values and
表触发器2.0
行触发器获取的值改为放在中间表中
触发器在向目标表中写数据时,目标表的记录可能不完全,需要向目标表添加不存在的数据。
用到merge into 语法。
merge into 要更新的表(目标表)
using 记录完整的表(源表)
on 两表记录对比条件
when matched then
update
when not matched then
insert
注意:执行过程是源表中记录一条一条去匹配目标表内容,所以源表中数据不能有符合对比条件的重复数据
另: 某语句要查询不重复内容,为了让distinct只作用于某个字段,可以与group by 连用,然后在select中用count函数
select *, count(distinct 字段) from table group by 字段
行触发器:
create or replace trigger qmfawtechnics_row --行触发器,保存更改的masterbsoid
after insert or update or delete
on qmfawtechnics
for each row
declare
p_count number;
begin
if inserting then
select count(*) into p_count
from trigger_qmfawtechnics --中间表已存在
where masterbsoid = :new.masterbsoid;
if p_count = 0 then
insert into trigger_qmfawtechnics
values(:new.masterbsoid, 0); --若已有,则不添加
end if;
end if;
if deleting then
select count(*) into p_count
from trigger_qmfawtechnics
where masterbsoid = :old.masterbsoid;
if p_count = 0 then
insert into trigger_qmfawtechnics
values(:old.masterbsoid, 1);
end if;
end if;
if updating then
select count(*) into p_count
from trigger_qmfawtechnics
where masterbsoid = :old.masterbsoid;
if p_count = 0 then
insert into trigger_qmfawtechnics
values(:old.masterbsoid, 1);
end if;
select count(*) into p_count
from trigger_qmfawtechnics
where masterbsoid = :new.masterbsoid;
if p_count = 0 then
insert into trigger_qmfawtechnics
values(:new.masterbsoid, 0);
end if;
end if;
end;
表触发器:
create or replace trigger qmfawtechnics_table
after insert or update or delete
on qmfawtechnics --表触发器,执行更新操作
begin
--更新工艺最大版序,并放入qmfawtechnicsmaxversionvalue表中
merge into qmfawtechnicsmaxversionvalue t1
using (select distinct masterbsoid
from trigger_qmfawtechnics) t2
on (t1.masterbsoid=t2.masterbsoid)
when matched then
update
set maxversionvalue = getmaxversionvalue(‘qmfawtechnics‘,t2.masterbsoid)
where masterbsoid=t2.masterbsoid
when not matched then
insert
values(t2.masterbsoid,getmaxversionvalue(‘qmfawtechnics‘,t2.masterbsoid));
--更新零件对应的工艺,放入technicscache缓存表
--注意顺序,以下操作要使用更新后的qmfawtechnicsmaxversionvalue表
merge into technicscache t1
using (select distinct a.bsoid, c.carnumber
from technicspart a
join qmpartCarNum c on c.partbsoid=a.partbsoid
join qmfawtechnicsmaster d on d.technicspart=a.bsoid
join trigger_qmfawtechnics e on e.masterbsoid=d.bsoid) t2
on ( t1.carnumber=t2.carnumber and t1.technicspartbsoid = t2.bsoid)
when matched then
update
set technicsbsoid = getJustTechnicsBsoid(t1.technicspartbsoid,t1.carnumber)
where technicspartbsoid = t2.bsoid
when not matched then
insert
values(t2.bsoid,t2.carnumber,getJustTechnicsBsoid(t2.bsoid,t2.carnumber));
delete trigger_qmfawtechnics;
end;
标签:重复数据 添加 ace 完整 rom csp tab values and
原文地址:http://www.cnblogs.com/zhangyg8080/p/7239199.html