今天遇到一個系統的數據錯誤,需要進行修復,之前一直用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