mysql触发器执行动态语句_关于MySQL中触发器执行动态sql的问题

这几天手头开发的系统要做一个类似windows账户到期时间的功能,考虑了半天想出了一个技术上和逻辑上都还能实现的解决方案:

创建一个用户存入数据库的时候都创建一个事件调度器来控制用户的到期时间(mysql的时间调度器确实很方便)。想起来是很简单,但是做起来问题确实一波接一波...

一些小问题就不说了,到了关键的地方了:在插入一个用户的时候我到底是在应用层来添加一个事件调度器呢还是在数据库里面自动添加。

当然不管从代码的美观上、系统设计的思想上或是运行效率上来说,我都应该选择后者(废话...)。于是我就选择了后者(你敢再说废话吗)。那么就有了今天的这段笔记...

一开始我兴致勃勃的拼好字符串什么的,写了如下一个触发器

delimiter //

create trigger tri_user after insert on user for each row

begin

set @u_name = new.u_name;

set @expire = '';

select sm_pwd_alter_day into @expire from system_manage where sm_id

= 1;

set @str = concat('create EVENT eve_', @u_name, ' ON SCHEDULE EVERY

', @expire, ' day DO

update user set u_enable = /'未启用/' where u_name = /'', @u_name,

'/'');

prepare stmt_str from @str;

execute stmt_str;

DEALLOCATE PREPARE stmt_str;

end;

//

delimiter ;

仔细检查了语法,然后兴高采烈的运行...(orz)结果却是下面这行错误提示:

“Dynamic SQL is not allowed in stored function or trigger”

my god,原来mysql的触发器不支持动态sql,于是上网baidu寻找替代方法,无果,

然后google,方法出现:有人也遇到了触发器里执行动态sql的问题,然后发帖,后面高手解答说

把动态sql语句传入存储过程里,然后在触发器里调用存储过程就可以了。然后那位楼主还给了高手

70分(悲剧,后面说)...我想这次到位了。于是模仿之、于是运行之、于是出现结果:

“Dynamic SQL is not allowed in stored function or trigger”

卧槽...还是这个结果...

于是我明白了结了贴的也不一定是正确答案。

那么我以为存储过程里运行动态sql,然后触发器再调用这个存储过程,还是相当于在触发器里运行动态sql。

不想再去深究了,还是老老实实在应用程解决这个问题了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值