【问题标题】:Not allowed to return a result set from a trigger不允许从触发器返回结果集
【发布时间】:2013-05-19 23:56:44
【问题描述】:

我需要在插入时增加下一个最高字符字段 - 例如如果'007'存在,那么接下来是'008'

我有一个存储过程:

BEGIN
    SELECT LPAD(CAST(MAX(Line_Order) AS SIGNED INTEGER) + 1,3,'0')
    FROM bill_project_lineitems 
    WHERE Item_Id = vItem;
END

然后我有这个触发器:

CALL MaxLineOrder(new.item_id,@new.line_order )

我称之为之前

当我尝试插入时,MySQL 报错:1415 - 'Not allowed to return a result set from a trigger'

那么我该如何解决这个问题呢?

【问题讨论】:

  • 您没有显示完整的代码,您描述的内容是不可能的。此外,您对术语感到困惑,这使事情变得更加困难。 Thry 显示:1)所有代码 2)复制/粘贴错误

标签: mysql stored-procedures triggers


【解决方案1】:

好吧,我又读了一遍,也许我没明白。 (但为什么不粘贴完整的代码?)错误很明显,您CANT从触发器返回结果集。

假设您想发出INSERT 并获得结果集。但你不能。所以你应该:

  1. 将您的 INSERT 移动到存储过程中
  2. DROP 触发器
  3. CALL 程序。

存储过程可以返回一个结果集(甚至许多结果集),所以这会起作用。我希望这是你想要的。

【讨论】:

  • 这是完整的代码(和完整的错误信息)——我在 Navicat 中执行此操作,而不是命令行或其他方式。不确定您的建议是否对我有用。我得考虑一下。谢谢
  • 不,它不完整:缺少 CREATE 部分。没有理由不能这样做。如果您解释了您的疑问,也许我或其他人可以告诉您更多建议。
  • 好吧,我再次放弃了触发器,并按照上面的答案 #2 使用存储过程 - 根据您的建议。这不是最佳做法吗?
猜你喜欢
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 2013-03-29
  • 1970-01-01
相关资源
最近更新 更多