MySQL存储过程里动态SQL的使用2012-09-11 TechTarget MySQL的存储过程不好用,一般在应用开发过程中不建议使用。但有时候在数 据迁移等环境中,特别涉及到复杂点的逻辑处理,就需要存储过程的配合了,当 然,用其他语言写程序实现也是可以的,不过效率估计没有直接在数据库中操作 高。有时候数据所在的表是不确定的,需要根据实际情况临时决定表名, 这时候就是动态SQL的用武之地了,以下示例展示了在一次数据导出的过程中使用 动态SQL的存储过程例子:
delimiter //CREATE PROCEDURE `proc_rt_imp_group`()BEGINDECLARE done INT DEFAULT FALSE;declare v_tid,v_ptable int;declare v_tablename VARCHAR(32);DECLARE cur_t CURSOR FOR select t.tid,t.ptable from pw_threads_rt t;DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;OPEN cur_t;read_loop: LOOPFETCH cur_t INTO v_tid,v_ptable;IF done THENLEAVE read_loop;END IF;if v_ptable=0 thenset v_tablename = "pw_posts";elseset v_tablename = concat("pw_posts",v_ptable);end if;set @updatesql =CONCAT("insert into pw_posts_rt select * from ",v_tablename," where tid= ",v_tid);PREPARE sqltext from @updatesql;execute sqltext;END LOOP;CLOSE cur_t;END//delimiter ;