是否可以在存儲過程中使用動態生成的SQL在MySQL中創建觸發器?我被準備語句執行我的程序等動態構造查詢,但是當我嘗試同樣的方法來創建觸發器我得到以下錯誤:可以使用存儲過程中的動態SQL創建MySQL觸發器嗎?
ERROR Code: 1295This command is not supported in the prepared statement protocol yet
從Bug #31625, PREPARED STATEMENT syntax does not allow to create TRIGGERS我看其他人一直在抱怨大約自2007年以來一樣。
而從外觀WL#2871: Prepare any 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();
我正在問同樣的問題。我甚至試圖直接將觸發器數據插入到information_schema.triggers表中,但是root帳戶都沒有權利這麼做。由於我必須創建大量觸發器,因此手動完成這項操作非常煩人。 – vulkanino 2011-05-17 13:08:18