MySQL过程在所有表上动态创建删除触发器

时间:2013-02-09 16:50:31

标签: mysql stored-procedures triggers

任务是在所有表上创建删除日志记录,但不会为将来创建的现有表或表添加任何开销。也就是说,在DB升级时: 1.循环数据库中所有表的信息模式 2.在循环中,删除现有的删除触发器(这样我们可以根据需要更新触发器逻辑) 3.再次在循环中,重新创建删除触发器

考虑存储过程的限制我认为我已经遇到了一些问题。这是我正在做的循环:

DELIMITER $$

DROP PROCEDURE IF EXISTS create_delete_triggers $$

CREATE PROCEDURE create_delete_triggers()
BEGIN
   DECLARE done int default false;
   DECLARE tblname CHAR(50);

   DECLARE cur1 CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.tables WHERE TABLE_SCHEMA = 'app_db' AND TABLE_NAME LIKE 'obj%' ;
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

   OPEN cur1;

   deleteloop: LOOP
        FETCH cur1 INTO tblname;
        IF done THEN
            LEAVE deleteloop;
        END IF;
        -- ANY SORT of function I can do here to set triggers on these 
        SELECT tblname, DATABASE();
    END LOOP;

    CLOSE cur1;
END $$

DELIMITER ;

首先,包含预处理语句的存储过程看起来像a no go,这似乎是一个显示停止。在理想的世界中,我的游标块将执行一个准备好的语句来执行此操作。

DELIMITER $$ 

CREATE TRIGGER del_row_table_name AFTER DELETE ON  tblname 
FOR EACH ROW 
BEGIN 
    -- use old row to marshall a row to store its primary key, time of deletion, and tablename
END $$ 

DELIMITER ;

所以基本上,我正在四处寻找MySQL中没有引起我注意的任何奇特的事情。另一方面,很高兴知道它无法完成,我会接受我必须在开发团队中引入开销。

0 个答案:

没有答案