创建oracle触发器以在列更新时发送电子邮件

时间:2014-11-12 20:15:38

标签: sql oracle

我正在尝试发送有关inv_qoh更新的电子邮件,当库存qoh低于3时,电子邮件发送带有item_id(位于同一个表中)和item_desc(来自另一个表,从item_id链接) 。这是我最近的触发器尝试,错误是不正确的触发器语法。任何帮助表示赞赏。

CREATE OR REPLACE TRIGGER Item_Out_of_Stock
AFTER UPDATE OF INV_QOH ON INVENTORY 
FOR EACH ROW
SELECT I.ITEM_ID, O.ITEM_DESC
FROM INVENTORY I, ITEM O
WHERE I.INV_QOH < 3 AND I.ITEM_ID = O.ITEM_ID;

BEGIN
  SEND_EMAIL(I.ITEM_ID, O.ITEM_DESC);
END;
/

1 个答案:

答案 0 :(得分:0)

这应该有效。我将select移动到一个隐式for循环中,所以我不必定义变量或选择INTO。但它是“每行”的触发器,因此只会产生一个行数。

create or replace trigger item_out_of_stock
    after update of inv_qoh
    on inventory
    for each row
begin
    for x in (select i.item_id, o.item_desc
                from inventory i, item o
               where i.inv_qoh < 3 and i.item_id = o.item_id) loop
        send_email (x.item_id, x.item_desc);
    end loop;
end;
/

这项工作非常有效,因为如果该项目不是&lt; 3,将发生0行计数,并且不会运行匿名块。