没有在plsql中发送邮件html正文

时间:2019-10-22 11:09:40

标签: oracle plsql oracle11g sendmail database-trigger

我在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;

2 个答案:

答案 0 :(得分:2)

这是怎么回事:

    AP_SUPPLIER_SITES_ALL

    中插入或更新行时,触发
  • 触发

    • 假设您运行了一个update语句,该语句更新了6行,在Scott的EMP表中是这样的:

      update emp set 
        sal = sal * 1.1
        where deptno = 20;
      
  • 对每个行触发
  • 触发;如果更新了6行,则会触发6次

  • 它计算联接的rib1rib2表中的行数

    • 可以不引用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
      
  • 如果该数字大于0,则您正在执行testrib过程
    • 如果发送电子邮件,则可以-将发送6次

该怎么办?切换到语句级触发器(而不是您当前使用的行级),因为它会针对每个语句触发一次,无论受影响的行数如何。

答案 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电子邮件,我认为问题不在计数(*) 预先感谢,