我在plsql中开发了一个触发器,该触发器可以工作,但是我同时收到6封邮件。我只需要一封邮件,我该怎么办?
CREATE or replace TRIGGER RI
AFTER insert or update on ap_supplier_sites_all
for each row
DECLARE
x_count NUMBER;
begin
select count(*) into x_count
from rib1 r1,rib2 r2
where r1.ATTRIBUTE4=r2.Supplier_RIB;
if(x_count > 0)
then
testrib;--execute SP
end if;
end;
答案 0 :(得分:2)
这是怎么回事:
AP_SUPPLIER_SITES_ALL
中插入或更新行时,触发触发
假设您运行了一个update
语句,该语句更新了6行,在Scott的EMP
表中是这样的:
update emp set
sal = sal * 1.1
where deptno = 20;
触发;如果更新了6行,则会触发6次
它计算联接的rib1
和rib2
表中的行数
可以不引用ap_supplier_sites_all
中的某些“ ID”列吗?像
select count(*) into x_count
from rib1 r1, rib2 r2
where r1.ATTRIBUTE4 = r2.Supplier_RIB
and r1.some_id = :new.some_ap_supplier_sites_all_id; --> this
testrib
过程
该怎么办?切换到语句级触发器(而不是您当前使用的行级),因为它会针对每个语句触发一次,无论受影响的行数如何。
答案 1 :(得分:0)
您好,谢谢您的更新,以下是我的解释:我创建了两个视图rib1和rib3 rib1用于选择插入或更新的最后一行,rib3用于所有attribute4不为null的行: 创建或替换view rib1为( 选择*从( 从ap_supplier_sites_all l,apps.ap_suppliers p中选择p.segment1,p.vendor_name,l.attribute4,l.last_update_date,l.last_updated_by 其中p.vendor_id = l.vendor_id按l.last_update_date desc排序) 其中rownum = 1) 创建或替换view rib3为( 选择不同的p.segment1 Supplier_Number,p.vendor_name Supplier_Name,s.attribute4 Supplier_RIB,s.last_update_date Update_Date,p.last_updated_by Update_User 来自apps.ap_supplier_sites_all,apps.ap_suppliers p 其中p.vendor_id = s.vendor_id和s.attribute4不为空) 如果attribute4与另一个供应商(segment1)存在,则会创建我的触发器来发送邮件,我创建了过程:用于发送电子邮件的testrib,它可以正常工作,我只收到电子邮件,但是当我在触发器中调用testrib时,我同时收到了6封电子邮件和所有时间6电子邮件(与计数没有任何关系),count()= 2-> 6电子邮件,count()= 11-> 6电子邮件,我认为问题不在计数(*) 预先感谢,