调用包含从触发动态SQL存储过程(Calling stored procedure that con

2019-09-19 10:01发布

我打电话从触发存储过程,我得到以下错误:

动态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

Answer 1:

你不能调用存储过程从一个触发预处理语句

http://dev.mysql.com/doc/mysql-reslimits-excerpt/5.1/en/stored-program-restrictions.html

有一种可能的解决办法,但需要你写,将执行动态SQL给你,然后从你的程序调用UDF一个UDF。 你可以找到在MySQL的src,SQL / udf_example.c一个例子UDF。



文章来源: Calling stored procedure that contains dynamic SQL from Trigger