1. 程式人生 > >MYSQL儲存過程和遊標(2)

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

這是多個欄位賦值多個變數的方法

有改動會再更