MySQL 说:#1336 - 存储函数或触发器中不允许使用动态 SQL

Posted

技术标签:

【中文标题】MySQL 说:#1336 - 存储函数或触发器中不允许使用动态 SQL【英文标题】:MySQL said: #1336 - Dynamic SQL is not allowed in stored function or trigger 【发布时间】:2018-03-27 08:46:13 【问题描述】:

This is main question please help me for this

这是我的代码:

BEGIN   

DECLARE TMPCOL VARCHAR(100);

SET TMPCOL= 'ID';   

SET @s = CONCAT('INSERT INTO TMP(DATA1, DATA2) VALUES ("DATA",OLD.',TMPCOL,');');  

PREPARE stmt1 FROM @s;    

EXECUTE stmt1;   

DEALLOCATE PREPARE stmt1;  

END

【问题讨论】:

错误信息说明了一切...... 【参考方案1】:

您不需要动态 SQL。这实际上是相同的:

BEGIN   
    INSERT INTO TMP (DATA1, DATA2)
        VALUES ('DATA', OLD.ID);
END;

这应该在触发器中起作用。否则,old 未定义。

【讨论】:

这是必要的,需要这种动态思维,否则它很容易使用

以上是关于MySQL 说:#1336 - 存储函数或触发器中不允许使用动态 SQL的主要内容,如果未能解决你的问题,请参考以下文章

MySQL #1422 存储函数或触发器中不允许显式或隐式提交

mysql视图,存储过程,函数,事务,触发器,以及动态执行sql

MySql 错误:无法更新存储函数/触发器中的表,因为它已被调用此存储函数/触发器的语句使用

如何在 MYSQL 中编写可以从触发器和存储函数调用的信号函数?

如何在 MYSQL 中编写可以从触发器和存储函数调用的信号函数?

mysql数据库之 存储引擎事务视图触发器存储过程函数流程控制