Вызов хранимой процедуры, которая содержит динамический SQL из Trigger

Я вызываю хранимую процедуру из Trigger и получаю следующую ошибку:

Динамический SQL не разрешен в хранимой функции или триггере

Почему это происходит, динамический 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

1 ответ

Решение

Вы не можете вызвать хранимую процедуру с подготовленными инструкциями из триггера

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

Существует возможный обходной путь, но он требует от вас написания UDF, который будет выполнять динамический sql для вас, а затем вызывать UDF из вашей процедуры. Вы можете найти пример UDF в src mysql, sql/udf_example.c.

Другие вопросы по тегам