首页 新闻 会员 周边

mysql触发器无法执行动态拼接的sql语句

0
悬赏园豆:10 [已解决问题] 解决于 2020-08-04 11:10

CREATE DEFINER=`sa`@`%` PROCEDURE `sp_insertodstasktable`(in dbName VARCHAR(64),in sourceTable VARCHAR(64),
in keyName VARCHAR(64), in id VARCHAR(64),in statusValue tinyint)
BEGIN
SET @tableName = f_getodstasktablename();
-- CALL sp_createodstasktable(@tableName);

PREPARE exec_sql FROM "INSERT INTO ods_task_20200730 values('db1','cms_channel','id','123456','0',NOW())";
EXECUTE exec_sql;
DEALLOCATE PREPARE exec_sql;

END

直接上代码,上面的一句动态sql语句,由于insert的对象表,是动态创建的。执行上面的存储过程是可以的。

但是由于这个操作,是需要在具体的触发器下才能执行。触发器下运行报错:

Dynamic SQL is not allowed in stored function or trigger。

有什么好的解决办法吗?

Code_Song的主页 Code_Song | 初学一级 | 园豆:51
提问于:2020-07-30 11:00
< >
分享
最佳答案
0

这有一文,看看能不能参考:Dynamic SQL is not allowed in stored function or trigger issue while create trigger on mysql

另外,我不推荐用触发器,存储过程这些,把业务细节都埋藏在sql语句里了,如果有可能,尽量在系统代码里体现业务逻辑。

收获园豆:10
会长 | 专家六级 |园豆:12401 | 2020-07-30 11:19

恩恩,这个帖子搜到了。我也是看了这贴之后,把动态sql的执行操作,用存储过程包起来。

不知道回复人的mysql版本是多少的。我这边是5.7.22版本的,不行

 

Code_Song | 园豆:51 (初学一级) | 2020-07-30 11:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册