分类: Mysql/postgreSQL
2007-08-21 15:04:42
DELIMITER $$
DROP PROCEDURE IF EXISTS `test`.`sp_row_column_wrap`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_row_column_wrap`(IN $schema_name varchar(64),
IN $table_name varchar(64))
BEGIN
declare cnt int(11);
declare $table_rows int(11);
declare i int(11);
declare j int(11);
declare s int(11);
declare str varchar(255);
-- Get the column number of the table
select count(1) from information_schema.columns where table_schema=$schema_name and table_name=$table_name into cnt;
-- Get the row number of the table
select table_rows from information_schema.tables where table_schema = $schema_name and table_name=$table_name into $table_rows;
-- Check whether the table exists or not
drop table if exists test.temp;
create table if not exists test.temp (`1` varchar(255) not null);
-- loop1 start
set i = 0;
loop1:loop
if i = $table_rows-1 then
leave loop1;
end if;
set @stmt1 = concat('alter table test.temp add `',i+2,'` varchar(255) not null');
prepare s1 from @stmt1;
execute s1;
deallocate prepare s1;
set @stmt1 = '';
set i = i + 1;
end loop loop1;
-- loop1 end;
set s = 0;
-- loop2 start
loop2:loop
-- leave loop2
if s=cnt then
leave loop2;
end if;
set @stmt2 = concat('select column_name from information_schema.columns where table_schema="',$schema_name,
'" and table_name="',$table_name,'" limit ',s,',1 into @temp;');
prepare s2 from @stmt2;
execute s2;
deallocate prepare s2;
set @stmt2 = '';
set j=0;
set str = ' select ';
-- Loop3 start
loop3:loop
if j = $table_rows then
leave loop3;
end if;
set @stmt3 = concat('select ',@temp,' from ',$schema_name,'.',$table_name,' limit ',j,',1 into @temp2;');
prepare s3 from @stmt3;
execute s3;
set str = concat(str,'"',@temp2,'"',',');
deallocate prepare s3;
set @stmt3 = '';
set j = j+1;
end loop loop3;
set str = left(str,length(str)-1);
-- insert new data into table
set @stmt4 = concat('insert into test.temp',str,';');
prepare s4 from @stmt4;
execute s4;
deallocate prepare s4;
set @stmt4 = '';
set s=s+1;
end loop loop2;
END$$
DELIMITER ;
aid | title |
1 | 111 |
2 | 222 |
bid | aid | image | time |
1 | 2 | 1.gif | 2007-08-08 |
2 | 2 | 2.gif | 2007-08-09 |
3 | 2 | 3.gif | 2007-08-08 |
id | cost | des | Autoid |
1 | 10 | aaaa | 1 |
1 | 15 | bbbb | 2 |
1 | 20 | cccc | 3 |
2 | 80 | aaaa | 4 |
2 | 100 | bbbb | 5 |
2 | 60 | dddd | 6 |
3 | 500 | dddd | 7 |
1 | 2 |
1 | 2 |
111 | 222 |
1 | 2 | 3 |
1 | 2 | 3 |
2 | 2 | 2 |
1.gif | 2.gif | 3.gif |
2007-08-08 | 2007-08-09 | 2007-08-08 |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
1 | 1 | 1 | 2 | 2 | 2 | 3 |
10 | 15 | 20 | 80 | 100 | 60 | 500 |
aaaa | bbbb | cccc | aaaa | bbbb | dddd | dddd |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
chinaunix网友2008-11-11 13:03:06
写的不错.不过 如果数据量过大,这个过程无疑是很浪费资源的. 另外,功能不够强大,如果加上合并统计序列,会更完美些. 最主要还是资源问题.
chinaunix网友2008-02-16 16:44:03
$的符号是什么意思!我在编写过程中从来没有用到这样的符号! 还有我2008年2月16日 星期六给你发了封邮件!不知道您看了没有!