› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
lazycat353
V2EX  ›  MySQL

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

  •  
  •   lazycat353 · Apr 19, 2021 · 2719 views
    This topic created in 1993 days ago, the information mentioned may be changed or developed.

    事情是这样的,一开始是在 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;

    8 replies  •  2021-04-20 11:45:52 +08:00
    phpfpm
        1
    phpfpm  
       Apr 19, 2021   ❤️ 1
    不要用触发器。不要用存储过程。
    mingl0280
        2
    mingl0280  
       Apr 19, 2021 via Android
    是不是禁止在 trigger 里使用存储过程了?
    你不用在 trigger 里叠存储过程的,因为 trigger 本身就是存储过程了。
    lazycat353
        3
    lazycat353  
    OP
       Apr 19, 2021
    @mingl0280 我之前也考虑过这个问题,不过上面也提到了,原来在 5.6 的 mysql,这种组合是可以正常使用的,所以我也很疑惑
    lazycat353
        4
    lazycat353  
    OP
       Apr 19, 2021
    @phpfpm 😂原来的代码就是这样的,也不好动它
    mingl0280
        5
    mingl0280  
       Apr 19, 2021
    @lazycat353 不要理他,他啥都不会只会喊你不要用 xxx 。
    mingl0280
        6
    mingl0280  
       Apr 19, 2021
    @lazycat353 总之就是先去掉存储过程试一下(你这个代码太乱了我懒得格式化了看哈哈哈)
    lazycat353
        7
    lazycat353  
    OP
       Apr 19, 2021
    @mingl0280 去掉存储过程确实是可以用了 不过就是以前封装的存储过程里的 sql 现在都写在触发器上了
    mingl0280
        8
    mingl0280  
       Apr 20, 2021
    @lazycat353 触发器就是存储过程的一种,不用担心写在哪。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2183 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:49 · PVG 23:49 · LAX 08:49 · JFK 11:49
    ♥ Do have faith in what you're doing.