1つのテーブルを複数のテーブルに分割
#-------- 1. BEGIN ----------
drop table if exists `testTable`;
create table `testTable`(
id varchar(50)
);
INSERT into `testTable` VALUES(UUID());
INSERT into `testTable` VALUES(UUID());
INSERT into `testTable` VALUES(UUID());
INSERT into `testTable` VALUES(UUID());
INSERT into `testTable` VALUES(UUID());
INSERT into `testTable` VALUES(UUID());
INSERT into `testTable` VALUES(UUID());
INSERT into `testTable` VALUES(UUID());
INSERT into `testTable` VALUES(UUID());
INSERT into `testTable` VALUES(UUID());
#select * from `testTable`;
#-------- 2. ----------
DELIMITER $$
drop PROCEDURE if exists `Proc_GenerateTableByPager`;
$$
create PROCEDURE `Proc_GenerateTableByPager`()
begin
declare v_pageIndex ,v_pageSize ,v_recordRows,v_sql varchar(4000);
CREATE table if not exists `pager_assistant`(
rowNum int NOT NULL AUTO_INCREMENT
,id varchar(50) not null
,PRIMARY KEY (`rowNum`)
);
truncate table `pager_assistant`;
INSERT `pager_assistant`(id)
select `id` from `testTable`;
set v_pageIndex=1;
set v_pageSize=3;
select @v_recordRows:=max(rowNum) from `pager_assistant`;
while (v_pageIndex-1)*v_pageSize<=@v_recordRows do
# :MySQL SQL
set @v_sql:=CONCAT('drop table if exists testTable', v_pageIndex ,';');
prepare stmt from @v_sql;
EXECUTE stmt;
set @v_sql:=concat('create table testTable', v_pageIndex, '(id varchar(50));');
prepare stmt from @v_sql;
EXECUTE stmt;
set @v_sql:=concat(' insert into testTable', v_pageIndex, '(id)'
,' select id from testTable where id in ( '
,' select id from pager_assistant where rowNum>'
,(v_pageIndex-1)*v_pageSize
,' and rowNum<='
,(v_pageIndex * v_pageSize)
,' );'
);
prepare stmt from @v_sql;
EXECUTE stmt;
set v_pageIndex=v_pageIndex+1;
end while;
end
$$
call `Proc_GenerateTableByPager`();
クリックしてリンクを開く