求助!mysql5.7 触发器内无法使用存储过程?

2021-04-19 10:29:41 +08:00
 lazycat353

事情是这样的,一开始是在 mysql5.6 的版本上,使用触发器+存储过程的组合,是正常的; 后来公司一次升级把 mysql 换成了 5.7 版本,然后就失效了,求助是 mysql5.7 在这方面有什么限制吗 之前在另一个 5.7 环境执行 sql 时,提醒过 binlog 的问题,不知道和这个时候有关系,是否需要额外的参数设置 希望各位大佬指点一下

附上脚本 触发器脚本: CREATE TRIGGER tg_tab_name_insert AFTER INSERT ON table FOR EACH ROW BEGIN CALL p_sync_data('tab_user_order','id',NEW.id,1); END;

存储过脚本: CREATE PROCEDURE p_sync_data( IN var_tb_name varchar(50), IN var_tb_key varchar(50), IN var_tb_key_value varchar(50), IN var_op int(1) ) BEGIN DECLARE var_enable INT(1); SELECT enable INTO var_enable FROM tb_ctrl WHERE tb_name=var_tb_name; IF var_enable IS NOT NULL AND var_enable = 1 THEN INSERT INTO tb_data_sync(id,sync_tb_name,sync_tb_key,tb_key_value,sync_op,created) VALUES (UUID(),var_tb_name,var_tb_key,var_tb_key_value,var_op,f_current_timestamp()); END IF; END;

时间戳的函数脚本: CREATE FUNCTION f_current_timestamp() RETURNS bigint(20) BEGIN DECLARE r_timstamp BIGINT(20); SELECT REPLACE(unix_timestamp(current_timestamp(3)),'.','') INTO r_timstamp; RETURN r_timstamp; END;

1726 次点击
所在节点    MySQL
8 条回复
phpfpm
2021-04-19 10:31:00 +08:00
不要用触发器。不要用存储过程。
mingl0280
2021-04-19 10:45:49 +08:00
是不是禁止在 trigger 里使用存储过程了?
你不用在 trigger 里叠存储过程的,因为 trigger 本身就是存储过程了。
lazycat353
2021-04-19 10:54:20 +08:00
@mingl0280 我之前也考虑过这个问题,不过上面也提到了,原来在 5.6 的 mysql,这种组合是可以正常使用的,所以我也很疑惑
lazycat353
2021-04-19 11:02:54 +08:00
@phpfpm 😂原来的代码就是这样的,也不好动它
mingl0280
2021-04-19 11:03:24 +08:00
@lazycat353 不要理他,他啥都不会只会喊你不要用 xxx 。
mingl0280
2021-04-19 11:03:52 +08:00
@lazycat353 总之就是先去掉存储过程试一下(你这个代码太乱了我懒得格式化了看哈哈哈)
lazycat353
2021-04-19 15:54:43 +08:00
@mingl0280 去掉存储过程确实是可以用了 不过就是以前封装的存储过程里的 sql 现在都写在触发器上了
mingl0280
2021-04-20 11:45:52 +08:00
@lazycat353 触发器就是存储过程的一种,不用担心写在哪。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/771575

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX