2012-07-12 37 views
4

我打电话,从触发存储过程,我得到以下错误:调用存储过程包含动态SQL从触发

Dynamic SQL is not allowed in stored function or trigger

为什么会出现这种情况,动态SQL被存储过程中执行,这是从Trigger调用。也许这是问题,如果有的话,是否有任何解决方法?

编辑(添加的代码):

这里是触发从主表:

-- 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 
+0

你能告诉我们一些代码吗? – jcho360 2012-07-12 17:54:03

+0

我已添加代码。我希望现在更清楚。 – 2012-07-12 19:26:38

+0

我遇到同样的问题,您是否找到解决方案? – zidarsk8 2012-09-07 03:32:41

回答