Вызов хранимой процедуры, которая содержит динамический 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.