不允许从触发器返回结果集

时间:2014-11-20 10:15:30

标签: mysql

我有问题:

我创建了程序:

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的>

请帮帮我。

1 个答案:

答案 0 :(得分:4)

例外是我认为足够清楚。

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

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

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