由于数据量过大,不同数据按月或按天存放,每月或每天自动生成数据表。
但是用户查询时间可能过长,所以,需要判断用户查询时间段内,表是否存在。我想在整个SQL语句执行过程中,用while循环来检测表是否存在,这样比使用应用程序快些。之前在MSSQL上一直这么做,现在数据移植到MySQL上,使用while循环来做,总是不正确。简单的说,我就是想在MySQL的SQL语句中(非函数、存储过程中)使用while循环,然后使用prepare 和 execute 执行动态的SQL语句。求大侠帮助。
但是用户查询时间可能过长,所以,需要判断用户查询时间段内,表是否存在。我想在整个SQL语句执行过程中,用while循环来检测表是否存在,这样比使用应用程序快些。之前在MSSQL上一直这么做,现在数据移植到MySQL上,使用while循环来做,总是不正确。简单的说,我就是想在MySQL的SQL语句中(非函数、存储过程中)使用while循环,然后使用prepare 和 execute 执行动态的SQL语句。求大侠帮助。
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;参考这个存储过程。
谢谢。不过,不知道MySQL的存储过程怎么样,而且,现在leader不同意使用使用存储过程。看来,只能使用 客户端代码检测了,不过,这样的话,一个SQL语句,可能需要多次链接查询数据库,比较慢。
这个命令晓得,关键是while语句无法使用,必须在存储过程或函数中才能使用。难呀。