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

2020-08-04 10:51发布

问题:

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。

有什么好的解决办法吗?

回答1:

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

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