存储过程和游标!
之前修改了表结构,现在要填充内容了,
需求:将已有的数据表内容进行扩充,比如A表现在增加了字段,内容在B表,将他转移过来
这里经过挣扎,最后达成!
/*填充batch_course_prearrange数据*/
#select prearrange_id from batch_course_prearrange;
delimiter // #定义分隔符
CREATE PROCEDURE data_bcp()
BEGIN
DECLARE crecuit_id BIGINT(13);
DECLARE cprearrange_id BIGINT(13);
DECLARE crecuit_cc_id BIGINT(13);
DECLARE ccourse_id BIGINT(13);
DECLARE cgrade_id INT(8);
DECLARE s INT DEFAULT 0;#设置一个终止标记
DECLARE t_index CURSOR FOR SELECT recuit_id,prearrange_id from batch_course_prearrange;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s=1;
OPEN t_index;#打开游标
FETCH t_index INTO crecuit_id, cprearrange_id;#取出这条数据
#SELECT crecuit_id;
WHILE s <> 1 DO
SELECT cp.recuit_cc_id, cp.course_id, cp.grade_id INTO crecuit_cc_id, ccourse_id, cgrade_id
FROM course_prearrange cp where cp.prearrange_id=cprearrange_id;
#SELECT cgrade_id;
UPDATE batch_course_prearrange bcp SET bcp.recuit_cc_id=crecuit_cc_id, bcp.course_id=ccourse_id, bcp.grade_id=cgrade_id where bcp.prearrange_id=cprearrange_id and bcp.recuit_id=crecuit_id;
FETCH t_index INTO crecuit_id, cprearrange_id;
END WHILE;
CLOSE t_index;
END //
delimiter ; #定义分隔符
简单解释
DECLARE t_index CURSOR FOR SELECT recuit_id,prearrange_id from batch_course_prearrange;
定义一个游标t_index
DECLARE CONTINUE HANDLER FOR SQLSTATE ‘02000’ SET s=1;
终止标记
坑:
因为最开始看的mssql的,select into不能直接创建表。
DECLARE crecuit_id BIGINT(13);
这里不能直接写recuit_id,和字段同名的变量应该是无效的
SELECT cp.recuit_cc_id, cp.course_id, cp.grade_id INTO crecuit_cc_id, ccourse_id, cgrade_id
这是多个字段赋值多个变量的方法
有改动会再更