【问题标题】:Trigger calling a Stored Procedure触发调用存储过程
【发布时间】:2011-03-23 13:28:31
【问题描述】:

我无法得到输出也找不到问题。

问题:

Table : rent_info(cust_id,date_out,date_due_in,date_returned,fine)

这张桌子是租书用的。首先,在插入时,我必须提供 cust_id、date_out(图书发行日期)、date_due_in(发行日期后 7 天)。当图书归还时,会使用触发器将数据插入到rent_info 表中。

我必须提供 date_returned。在触发器中,我必须计算每天 10 美元的罚款。

为了返回,我编写了一个更新表并插入返回日期的过程。然后创建一个触发器(一个行级触发器,检查更新要支付多少罚款)。最后,计算出的罚款已更新到表格中。

问题是我可以生成罚款金额,但用于更新罚款的更新语句给了我“table mutating error”。

你能告诉我哪里出错了。抱歉没有发布代码。我无法从实验室获得代码。如果这些信息还不够,我可以在我的系统中试一试,稍后再在这里发布。

【问题讨论】:

  • 参见this answer,它解释了如何解决变异表错误

标签: database stored-procedures plsql triggers


【解决方案1】:

如果没有代码,很难猜测您是如何尝试解决此问题的,但听起来您已经编写了一条 UPDATE 语句来从行级触发器中更新当前行。

那是不可能的。您无法更新正在更新的行。

您可以通过更改触发器内的 ":new.fine" 的值来更新计算的罚款。

【讨论】:

  • 是的 - 并确保触发器是带有 FOR EACH ROW 选项的 BEFORE UPDATE 触发器。
猜你喜欢
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
  • 2011-09-30
  • 1970-01-01
  • 2015-05-28
  • 2017-10-14
相关资源
最近更新 更多