MYSQL存储过程和游标(2)

存储过程和游标!

之前修改了表结构,现在要填充内容了,
需求:将已有的数据表内容进行扩充,比如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

这是多个字段赋值多个变量的方法

有改动会再更

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值