不允许从触发器返回结果集 [英] Not allowed to return a result set from a trigger

查看:177
本文介绍了不允许从触发器返回结果集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有问题:

我创建了过程:

CREATE PROCEDURE `tran_sp` ()
BEGIN
  SELECT 'procedure runned!';
END
$ 

这是可行的!

mysql> CALL tran_sp()$
+-------------------+
| procedure runned! |
+-------------------+
| procedure runned! |
+-------------------+
1 row in set (0.00 sec)

然后我创建了触发器:

mysql> CREATE TRIGGER my_trigger1
    ->     AFTER INSERT ON users
    ->     FOR EACH ROW
    -> BEGIN
    ->          CALL tran_sp();
    -> END$


mysql> INSERT INTO users VALUES(166,156)$

错误1415(0A000):不允许从触发器返回结果集 mysql>

ERROR 1415 (0A000): Not allowed to return a result set from a trigger mysql>

请帮助我.

推荐答案

我认为足够清楚了.

您可以在触发器内执行其他操作(调用SP,执行插入/更新/删除操作等),但是所有这些操作均不允许返回任何结果.

You can perform additional operations inside a trigger (call a SP, perform insert / update / delete operations, ...) but all of those aren't allowed to return any result.

这意味着不允许在内部带有简单选择语句的SP.相反,如果您例如在循环中使用此select语句以执行更新或类似操作,则将允许这样做,因为您不会返回任何内容.

This means, a SP with a simple select-statement inside isn't allowed. If instead you would use this select statement within a loop for instance in order to perform updates or similar, this would be allowed, as you wouldn't return anything.

原因是,insert/update/delete语句不能返回任何内容,它不能返回存储过程的结果集,因此,您不应尝试在触发器内部返回一个值.

The reason is, that an insert/update/delete statement can't return anything, it can't return the result set of your stored procedure and therefor you shouldn't try to return one inside the trigger.

这篇关于不允许从触发器返回结果集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆