由于数据量过大,不同数据按月或按天存放,每月或每天自动生成数据表。
但是用户查询时间可能过长,所以,需要判断用户查询时间段内,表是否存在。我想在整个SQL语句执行过程中,用while循环来检测表是否存在,这样比使用应用程序快些。之前在MSSQL上一直这么做,现在数据移植到MySQL上,使用while循环来做,总是不正确。简单的说,我就是想在MySQL的SQL语句中(非函数、存储过程中)使用while循环,然后使用prepare 和 execute 执行动态的SQL语句。求大侠帮助。

解决方案 »

  1.   

    简单的说,我就是想在MySQL的SQL语句中(非函数、存储过程中)使用while循环,然后使用prepare 和 execute 执行动态的SQL语句在MYSQL里,WHILE只能放到代码块里。让你失望了。
      

  2.   


    DROP PROCEDURE IF EXISTS mydb.Clear_DB;
    CREATE PROCEDURE mydb.`Clear_DB`( 
      )
    BEGIN
      DECLARE done INT DEFAULT 0; #游标的标志位
      DECLARE a varchar(20);
      DECLARE b varchar(20);
      DECLARE cur1 CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_name like 'http_200909%' ;
      DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
     
      OPEN cur1;
      REPEAT
        FETCH cur1 INTO a;
        IF NOT done THEN 
           set b=concat(b,'select *  from ',a,' where name=http://scholar.google.com.hk union all'); # 拼 命令  
        END IF;
        
      UNTIL done END REPEAT;
      CLOSE cur1;
      SET @E=mid(b,1,length(b)-9);   # 去掉最后一个UNION ALL
           PREPARE stmt1 FROM @E; 
              EXECUTE stmt1; # 执行命令 
              DEALLOCATE PREPARE stmt1; #释放对象
    END;参考这个存储过程。
      

  3.   


    谢谢。不过,不知道MySQL的存储过程怎么样,而且,现在leader不同意使用使用存储过程。看来,只能使用 客户端代码检测了,不过,这样的话,一个SQL语句,可能需要多次链接查询数据库,比较慢。
      

  4.   

    SELECT table_name FROM information_schema.TABLES WHERE table_name ='yourname';这个命令才是重点。
      

  5.   

    zuoxingyu这个存储过程用的刚刚的
      

  6.   


    这个命令晓得,关键是while语句无法使用,必须在存储过程或函数中才能使用。难呀。
      

  7.   

    MYSQL中无解。它不支持这种SQL语句。你的需求只能按四楼 zuoxingyu(差400分上北大)  的方法在存储过程中实现。但在MYSQL中类似的情况应该是用分区表来实现,而不是实质上的分表。
      

  8.   

    MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
      

  9.   

    很简单,SHOW TABLES LIKE 'TB1'如果返回空表示不存在。