CREATE PROCEDURE `proc_init_table`(in table_name varchar(255),in affected_rows int,in table_schema varchar(255),OUT _values tinytext)
begin
DECLARE done INT DEFAULT 0;
declare _auto_increment varchar(255);
declare _column_name varchar(255);
declare _data_type varchar(255);
declare _character_maximum_length bigint;
declare cur_column cursor for select column_name,data_type,EXTRA,character_maximum_length from information_schema.columns where table_name='frontend_log';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
open cur_column;
repeat
fetch cur_column into _column_name,_data_type,_auto_increment,_character_maximum_length;
if not done then
if _auto_increment="auto_increment" then
set _values=concat(_values,'\'\',');
ELSEIF INSTR(_data_type,'int')>0 then
set _values=concat(_values, floor(rand()*10000));
elseif INSTR(_data_type,'text')>0 then
set _values=concat(_values,md5(rand()*100));
elseif INSTR(_data_type,'char')>0 then
set _values=concat(_values,left(md5(rand()*100),_character_maximum_length)) ;
elseif _data_type='decimal' or _data_type='float' or _data_type='float unsigned' then
set _values=concat(_values, floor(rand()*10000));
elseif _data_type='datetime' then
set _values=concat(_values,now()+ceiling(rand()*10000));
end if;
end if;
UNTIL done END REPEAT;
CLOSE cur_column;end
call proc_init_table('',1,'',@out);
select @out;
begin
DECLARE done INT DEFAULT 0;
declare _auto_increment varchar(255);
declare _column_name varchar(255);
declare _data_type varchar(255);
declare _character_maximum_length bigint;
declare cur_column cursor for select column_name,data_type,EXTRA,character_maximum_length from information_schema.columns where table_name='frontend_log';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
open cur_column;
repeat
fetch cur_column into _column_name,_data_type,_auto_increment,_character_maximum_length;
if not done then
if _auto_increment="auto_increment" then
set _values=concat(_values,'\'\',');
ELSEIF INSTR(_data_type,'int')>0 then
set _values=concat(_values, floor(rand()*10000));
elseif INSTR(_data_type,'text')>0 then
set _values=concat(_values,md5(rand()*100));
elseif INSTR(_data_type,'char')>0 then
set _values=concat(_values,left(md5(rand()*100),_character_maximum_length)) ;
elseif _data_type='decimal' or _data_type='float' or _data_type='float unsigned' then
set _values=concat(_values, floor(rand()*10000));
elseif _data_type='datetime' then
set _values=concat(_values,now()+ceiling(rand()*10000));
end if;
end if;
UNTIL done END REPEAT;
CLOSE cur_column;end
call proc_init_table('',1,'',@out);
select @out;
就是这个存储过程为什么只是返回null,却没有返回得到一行测试的数据。