Oracle PL/SQL问题中的触发器

问题描述:

我刚刚编写了一个存储过程和存储函数,用于将新行插入到Orders表中。行更新插入:Ordernum,OrderDate,Customer,Rep,Manufacturer,Product,Qty和SaleAmount。Oracle PL/SQL问题中的触发器

我现在必须编写一个触发器,通过添加刚刚添加的订单数量来更新我的Salesreps表。我不确定如何引用行。我曾经尝试这样做:

​​

销售是对销售代表表中的列名。金额,如果在存储过程中使用的名称。我收到'Where Rep = Salesrep'返回的错误。如果我不包含这一行,触发器不会返回任何错误。不过,我假设如果我无法弄清楚如何将销售额与销售额相关联的salesrep,我会更新每一个salesrep(我相信他们会很满意)。任何帮助将不胜感激,一如既往。

+1

什么是'Salesrep'在'WHERE众议员=销售代表;'条款? – zerkms 2011-04-05 01:53:47

+0

对不起,我试着尽可能简洁地解释一切,但错过了一些东西。 Salesrep是Salesreps表中的行的名称(由Orders表中的Rep列引用,这是存储过程插入行的内容)。 – unit 2011-04-05 02:00:58

+0

你为什么不在'Rep'前面加上'NEW:'呢? (请参阅答案) – zerkms 2011-04-05 02:04:52

CREATE OR REPLACE TRIGGER UpdateSalesrep 
    AFTER INSERT ON Orders 
    FOR EACH ROW 
    BEGIN 
     UPDATE Salesreps 
     SET Sales = Sales + :NEW.Amount 
     WHERE Salesrep = :NEW.Rep; 
End; 
/
+0

谢谢,我会试试。这是我第一次写一个触发器,并且提供的noteset留下了一些需要的东西。对语法不确定。谢谢。 – unit 2011-04-05 02:06:32

谁说你必须写一个触发器?这是否明确说明您的作业任务是一项要求?您还可以在您已经写入的用于插入表订单的相同存储过程中更新表UpdateSalesRep。

阅读:http://www.oracle.com/technetwork/issue-archive/2008/08-sep/o58asktom-101055.html

+0

是的,这是分配的要求。 – unit 2011-04-05 13:37:13