關於MySQL遊標的使用

今天遇到一個系統的數據錯誤,需要進行修復,之前一直用Oracle,對MySQL不是特別熟悉

搞了好一會,記錄下來寫法,這裏用到了三種循環的其中一種LOOP

大體上是將A表的數據更新到B表,B表和A表的關係屬於被包含關係,遍歷B表

詳細如下:

BEGIN

DECLARE t_department_one VARCHAR (32);

-- 自定義變量
DECLARE t_department_second VARCHAR (50);

-- 自定義變量
DECLARE t_department_station VARCHAR (50);

-- 自定義變量 
DECLARE t_job_number VARCHAR (50);

-- 自定義變量 

-- 遍歷數據結束標誌
DECLARE done INT DEFAULT FALSE;

-- 遊標
DECLARE cur CURSOR FOR SELECT
	erw_employee_job_number
FROM
	pw_employee_return_work;



-- 將結束標誌綁定到遊標
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET done = TRUE;

-- 打開遊標
OPEN cur;

-- 開始循環
myLoop : LOOP 
	-- 提取遊標裏的數據,這裏只有一個,多個的話也一樣;
	FETCH cur INTO t_job_number;

-- 聲明結束的時候
IF done THEN
	LEAVE myLoop;
END
IF;

SELECT
	pw_employee.e_department_one,
	pw_employee.e_department_second,
	pw_employee.e_department_station INTO t_department_one,
	t_department_second,
	t_department_station
FROM
	pw_employee
WHERE
	pw_employee.e_job_number = t_job_number;

UPDATE pw_employee_return_work
SET pw_employee_return_work.erw_department_name = t_department_one,
 pw_employee_return_work.erw_department_one = t_department_one,
 pw_employee_return_work.erw_department_second = t_department_second,
 pw_employee_return_work.erw_department_station = t_department_station
WHERE pw_employee_return_work.erw_employee_job_number = t_job_number;
COMMIT;

-- 提交事務 
END
LOOP;

-- 關閉遊標
CLOSE cur;
END

DECLARE CONTINUE HANDLER FOR NOT FOUND
SET done = TRUE;

比較難理解的是這個地方,這個是個條件處理,針對NOT FOUND的條件,當沒有記錄時賦值爲 TRUE

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章