存储过程实现将某一结果集插入到另一张表的俩种方法
DROP PROCEDURE IF EXISTS tracking;
DELIMITER $$
$$
CREATE PROCEDURE `tracking`()
BEGIN
DECLARE done int DEFAULT 0;
DECLARE a int DEFAULT 1000;
DECLARE serialNo varchar(32);
DECLARE Description varchar(4000);
DECLARE cur1 CURSOR FOR select ccc.Description from aaa ccc;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur1;
FETCH cur1 INTO Description;
while done <> 1 do
set serialNo = concat(concat('CMW',date_format(now(),'%Y%m%d')),a);
INSERT into bbb(Description)
VALUES (Description);
FETCH cur1 INTO Description;
set a=a+1;
end while;
CLOSE cur1 ;
end;$$
DELIMITER ;
CREATE PROCEDURE `insert_cncbi_lpinformation`()
begin
DECLARE SERIALNO bigInt;
DECLARE ATTRIBUTE1 datetime;
DECLARE ATTRIBUTE2 varchar(250);
DECLARE ATTRIBUTE3 varchar(250);
DECLARE ATTRIBUTE4 varchar(250);
DECLARE ATTRIBUTE5 varchar(250);
DECLARE ATTRIBUTE6 varchar(250);
DECLARE ATTRIBUTE7 datetime;
DECLARE ATTRIBUTE8 datetime;
DECLARE ATTRIBUTE3TYPE VARCHAR(20);
DECLARE ATTRIBUTE4TYPE VARCHAR(20);
DECLARE v_sql TEXT;
DECLARE v_i INT;
DECLARE v_total_count BIGINT;
DECLARE v_initial_value BIGINT;
DECLARE v_rows BIGINT DEFAULT 120000;
DECLARE v_count INT;
DECLARE selectSql TEXT;
DECLARE insertSql TEXT;
set insertSql= 'INSERT into CNCBI_CODE_LPINFORMATION(SERIALNO,ATTRIBUTE1,ATTRIBUTE2,ATTRIBUTE3,ATTRIBUTE4,ATTRIBUTE5,ATTRIBUTE6,ATTRIBUTE7,ATTRIBUTE8,ATTRIBUTE3TYPE,ATTRIBUTE4TYPE)';
set selectSql = concat_ws('','select SERIALNO,ATTRIBUTE1,ATTRIBUTE2,ATTRIBUTE3,ATTRIBUTE4,ATTRIBUTE5,ATTRIBUTE6,ATTRIBUTE7,ATTRIBUTE8,ATTRIBUTE3TYPE,ATTRIBUTE4TYPE FROM batch_LP_Demo where 1=1');
set v_sql=concat_ws('','select count(*) into @count from ','(',selectSql,') t1');
set @v_sql=v_sql;
prepare stmt from @v_sql;
EXECUTE stmt;
deallocate prepare stmt;
select @count into v_total_count;
set v_count = v_total_count/v_rows;
set v_i =0;
while v_i<=v_count do
set v_initial_value=v_i*v_rows;
set v_sql=concat_ws(' ',insertSql,selectSql,'limit',v_initial_value,',',v_rows);
set @v_sql=v_sql;
prepare stmt from @v_sql;
EXECUTE stmt;
deallocate prepare stmt;
commit;
set v_i = v_i+1;
end while;
end;