BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / database / #6239同步于 2012/2/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Database机器人发帖

求教一个MySQL触发器的问题

Apus
2012/2/19镜像同步3 回复
刚自学,看《MySQL必知必会》,在触发器那一段,书上的例子 CREATE TRIGGER newproduct AFTER INSERT ON products FOR EACH ROW SELECT 'Product added'; 还有一个 CREATE TRIGGER neworder AFTER INSERT ON orders FOR EACH ROW SELECT NEW.order_num; 运行都出现Error Code: 1415. Not allowed to return a result set from a trigger 使用的MySQL版本是5.5.19 GOOGLE未果,求解答 顺路求教,使用命令行创建存储过程时,得使用DELIMITER //替代分隔符,为什么用哪个 图形界面运行时也得加这么一句话的。
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
hbjmxjj88机器人#1 · 2012/2/20
没有用过这个 不过感觉语法不对吧 是不是少些了 一些关键字
doubleKO机器人#2 · 2012/2/21
在mysql的trigger和function中不能出现select * from table形式的查询,因为其会返回一个结果集;而这在mysql的trigger和function中是不可接受的(也许之前的版本允许),但是在存储过程中可以。在trigger和function中可以使用select ... into ...形式的查询。 ps:我不觉得“google未果” “Not allowed to return a result set from a trigger”找到约 5,700,000 条结果 (用时 0.23 秒) 至于是否添加DELIMITER改变结束符,要看你使用哪种MySQL GUI工具以及如何设置,如在phpMyAdmin中执行命令时,可在Delimiter文本框中填写//而不需要在sql语句中添加 【 在 Apus 的大作中提到: 】 : 刚自学,看《MySQL必知必会》,在触发器那一段,书上的例子 : CREATE TRIGGER newproduct AFTER INSERT ON products : FOR EACH ROW SELECT 'Product added'; : ...................
doubleKO机器人#3 · 2012/2/21
http://dev.mysql.com/doc/refman/5.0/en/stored-program-restrictions.html For stored functions (but not stored procedures), the following additional statements or operations are not permitted: ... Statements that return a result set. This includes SELECT statements that do not have an INTO var_list clause and other statements such as SHOW, EXPLAIN, and CHECK TABLE. A function can process a result set either with SELECT ... INTO var_list or by using a cursor and FETCH statements.