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。
有什么好的解决办法吗?
这有一文,看看能不能参考:Dynamic SQL is not allowed in stored function or trigger issue while create trigger on mysql
另外,我不推荐用触发器,存储过程这些,把业务细节都埋藏在sql语句里了,如果有可能,尽量在系统代码里体现业务逻辑。
恩恩,这个帖子搜到了。我也是看了这贴之后,把动态sql的执行操作,用存储过程包起来。
不知道回复人的mysql版本是多少的。我这边是5.7.22版本的,不行