MySQL存储过程里动态SQL的使用

日期: 2012-06-25 作者:BANPING 来源:TechTarget中国 英文

  MySQL的存储过程不好用,一般在应用开发过程中不建议使用。但有时候在数据迁移等环境中,特别涉及到复杂点的逻辑处理,就需要存储过程的配合了,当然,用其他语言写程序实现也是可以的,不过效率估计没有直接在数据库中操作高。

  有时候数据所在的表是不确定的,需要根据实际情况临时决定表名,这时候就是动态SQL的用武之地了,以下示例展示了在一次数据导出的过程中使用动态SQL的存储过程例子:

  delimiter //
  CREATE PROCEDURE `proc_rt_imp_group`()
  BEGIN
  DECLARE 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: LOOP
  FETCH cur_t INTO v_tid,v_ptable;
  IF done THEN
  LEAVE read_loop;
  END IF;
  if v_ptable=0 then
  set v_tablename = ‘pw_posts’;
  else
  set 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 ;

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

BANPING
BANPING

相关推荐