【问题标题】:Triggers in Oracle PL/SQL ProblemsOracle PL/SQL 问题中的触发器
【发布时间】:2011-07-29 14:42:03
【问题描述】:

我刚刚编写了一个存储过程和存储函数,用于在我的 Orders 表中插入一个新行。行更新插入:Ordernum、OrderDate、Customer、Rep、Manufacturer、Product、Qty 和 SaleAmount。

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

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

Sales 是 Salesrep 表中列的名称。金额,如果在存储过程中使用的名称。我在“Where Rep = Salesrep”上返回了一个错误。如果我不包含此行,则触发器不会返回任何错误。但是,我假设如果我无法弄清楚如何将销售额与进行销售的一个销售代表联系起来,我将更新每个销售代表(我相信他们会非常满意)。一如既往,我们将不胜感激任何帮助。

【问题讨论】:

  • WHERE Rep = Salesrep; 子句中的Salesrep 是什么?
  • 抱歉,我尽量简明扼要地解释一切,但遗漏了一些东西。 Salesrep 是 Salesreps 表中行的名称(由 Orders 表中的 Rep 列引用,存储过程将行插入到该列中)。
  • 那你为什么不把NEW:放在Rep前面呢? (见答案)

标签: oracle plsql triggers


【解决方案1】:
 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;
/

【讨论】:

  • 谢谢,我会试试的。这是我第一次必须编写触发器,并且提供的 noteset 有一些不足之处。不确定语法。谢谢。
【解决方案2】:

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

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

【讨论】:

  • 是的,这是作业的要求。
猜你喜欢
  • 1970-01-01
  • 2011-08-06
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 2021-04-22
  • 2013-06-03
  • 2020-01-05
  • 1970-01-01
相关资源
最近更新 更多