Можно ли создать триггер в MySQL, используя динамически генерируемый SQL из хранимой процедуры?Я выполняю другие динамически сконструированные запросы в своей процедуре, подготавливая оператор, но при попытке использовать тот же подход для создания триггера я получаю следующую ошибку:
Код ошибки: 1295Эта команда не поддерживается впротокол подготовленного заявления еще
С Ошибка # 31625, синтаксис PREPARED STATEMENT не позволяет создавать TRIGGERS Я вижу, что другие люди жаловались на то жевещь с 2007 года.
И, судя по выражению WL # 2871: подготовить любой SQL , он еще не исправлен.
Есть лиобойти эту проблему?Есть ли другой способ создания триггеров с динамическим SQL?
По сути, я пытаюсь динамически создавать триггеры для записи данных аудита для вставок в различные таблицы.Я перечисляю таблицы, которые я хочу проверять, в таблице * audit_tables *.Упрощенная процедура, приведенная ниже, перебирает записи в этой таблице и пытается создать триггер.
drop procedure if exists curtest;
delimiter |
create procedure curtest()
BEGIN
DECLARE done INT DEFAULT 0;
declare tn varchar(16);
declare cur cursor for select table_name from audit_tables;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur;
read_loop: LOOP
fetch cur into tn;
if done then
leave read_loop;
end if;
/* Create the BEFORE INSERT trigger */
set @sql = concat('CREATE TRIGGER audit_', tn, '_bi BEFORE INSERT ON ', tn, '
FOR EACH ROW BEGIN
set new.foo="bar";
END;');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
end LOOP;
close cur;
END;
|
delimiter ;
call curtest();