MYSQL儲存過程和遊標(2)
阿新 • • 發佈:2018-12-14
儲存過程和遊標!
之前修改了表結構,現在要填充內容了,
需求:將已有的資料表內容進行擴充,比如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
這是多個欄位賦值多個變數的方法
有改動會再更