mysql 存储过程中能动态创建触发器吗_可以在存储过程中使用动态SQL创建MySQL触发器吗?...

是否可以在存储过程中使用动态生成的SQL在MySQL中创建触发器?我正在通过准备语句在我的过程中执行其他动态构造的查询,但是当我尝试相同的方法来创建触发器时,我得到以下错误:

ERROR Code: 1295This command is not supported in the prepared statement protocol yet

这个问题有解决方法吗?是否有另一种使用动态SQL创建触发器的方法?

基本上我要做的是动态创建触发器,用于记录各种不同表上插入的审计数据.我在* audit_tables *表中列出了我想要审核的表.下面的精简过程迭代该表中的条目并尝试创建触发器.

drop procedure if exists curtest;

delimiter |

create procedure curtest()

BEGIN

DECLARE done INT DEFAULT 0;

declare tn varchar(16);

declare cur cursor for select table_name from audit_tables;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

OPEN cur;

read_loop: LOOP

fetch cur into tn;

if done then

leave read_loop;

end if;

/* Create the BEFORE INSERT trigger */

set @sql = concat('CREATE TRIGGER audit_', tn, '_bi BEFORE INSERT ON ', tn, '

FOR EACH ROW BEGIN

set new.foo="bar";

END;');

PREPARE stmt FROM @sql;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

end LOOP;

close cur;

END;

|

delimiter ;

call curtest();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值