Mysql 从触发器调用包含动态SQL的存储过程

Mysql 从触发器调用包含动态SQL的存储过程,mysql,stored-procedures,triggers,dynamic-sql,Mysql,Stored Procedures,Triggers,Dynamic Sql,我正在从触发器调用存储过程,出现以下错误: 存储函数或触发器中不允许使用动态SQL 为什么会发生这种情况,动态SQL是在从触发器调用的存储过程中执行的。也许这就是问题所在,如果是的话,有什么解决办法吗 编辑(添加代码): 以下是主表中的触发器: -- Trigger DDL Statements DELIMITER $$ USE `TestaDataBase`$$ CREATE TRIGGER `TestaDataBase`.`UpdateAuxilaryTable` AFTER INSERT

我正在从触发器调用存储过程,出现以下错误:

存储函数或触发器中不允许使用动态SQL

为什么会发生这种情况,动态SQL是在从触发器调用的存储过程中执行的。也许这就是问题所在,如果是的话,有什么解决办法吗

编辑(添加代码):

以下是主表中的触发器:

-- Trigger DDL Statements
DELIMITER $$

USE `TestaDataBase`$$
CREATE TRIGGER `TestaDataBase`.`UpdateAuxilaryTable`
AFTER INSERT ON `MainTable` FOR EACH ROW  
BEGIN    
    /* Here we call stored procedure with parameter id of newly inserted row. */
    CALL TestProcedure('Year', 'Person', 'IdPerson', NEW.IdData);
END
$$
下面是从触发器调用的存储过程:

DELIMITER $$
CREATE PROCEDURE `TestDataBase`.`TestProcedure` (IN attribute CHAR(64), IN tableName CHAR(64), IN IdTable CHAR(64), IN IdLastRow MEDIUMINT)
BEGIN
DECLARE selectedValue MEDIUMINT;

SET @statement = CONCAT('SELECT ', attribute, ' FROM ', tableName, ' WHERE ', IdTable, ' = ', IdLastRow, ' INTO selectedValue');
PREPARE statementExecute FROM @statement;
EXECUTE statementExecute ;
...
...
END

不能使用触发器中的准备语句调用存储过程


有一种可能的解决方法,但需要您编写一个UDF来为您执行动态sql,然后从您的过程中调用UDF。您可以在mysql的src、sql/UDF\u example.c中找到一个示例UDF。

我添加了代码。我希望现在更清楚了。我也有同样的问题,你找到解决办法了吗?@zidarsk8:没有,我没有找到任何解决办法。我使用了普通的SQL,这意味着需要做更多的工作。