-- 修改銀行賬號存儲過程 (藍色的代表 某一張表 綠色的代表銀行賬號這個字段)
DROP PROCEDURE IF EXISTS update_bankNumber;
DELIMITER;;
CREATE PROCEDURE update_bankNumber()
BEGIN
DECLARE id varchar(64);
DECLARE oldNuber varchar(64);
DECLARE newNuber varchar(64);
DECLARE i int;
DECLARE icount int;
DECLARE t int;
DECLARE tcount int;
DECLARE lin int;
DECLARE linNum int;
-- 定義 循環變量
SET i = 0;
SET t = 0;
SET lin = 0;
SET linNum = 0;
-- 獲取總數
SET icount = (SELECT COUNT(*) from nk_business.base_pay_accounts);
-- 獲取表的條數
WHILE i < icount DO
SET id = "";
SET newNuber = ",";
-- 獲取每條數據的ID並賦值
SET id = (SELECT f.ID FROM nk_business.base_pay_accounts f LIMIT i,1);
SET oldNuber = (SELECT f.CARD_CODE FROM nk_business.base_pay_accounts f WHERE f.ID = id);
-- 去掉所有的空格
-- UPDATE base_pay_accounts bs SET bs.CARD_CODE = replace(oldNuber,' ','') where bs.ID = id;
SET oldNuber = replace(oldNuber,' ','');
IF oldNuber != "" THEN
SET @updateBankNubmerSql = CONCAT("update nk_business.base_pay_accounts set CARD_CODE ='",oldNuber,"' where ID='",id,"'");
PREPARE updateBankNumber from @updateBankNubmerSql;
EXECUTE updateBankNumber;
deallocate prepare updateBankNumber;
END IF;
-- 獲取並設置這一條數據的銀行賬號的長度
SET tcount = (SELECT length(f.CARD_CODE) FROM nk_business.base_pay_accounts f LIMIT i,1);
WHILE t < tcount DO
-- SET lin = t + 4;
IF t + 4 <= tcount THEN
SET newNuber = CONCAT(newNuber,(substring(oldNuber,t+1,4)),"-");
END IF;
IF t + 4 > tcount THEN
SET linNum = tcount - t;
SET newNuber = CONCAT(newNuber,(substring(oldNuber,t+1,linNum)),"-");
END IF;
SET t = t + 4;
-- 結束循環
END WHILE;
SET newNuber = replace(newNuber,'-',' ');
SET newNuber = replace(newNuber,',','');
SET newNuber = substring(newNuber,1,length(newNuber)-1);
IF newNuber != "" THEN
SET @updateBankNubmerSql = CONCAT("update nk_business.base_pay_accounts set CARD_CODE ='",newNuber,"' where ID='",id,"'");
PREPARE updateBankNumber from @updateBankNubmerSql;
EXECUTE updateBankNumber;
deallocate prepare updateBankNumber;
END IF;
SET t = 0;
-- 執行sql語句
SET i = i + 1;
-- 結束循環
END WHILE;
COMMIT;
END
;;
DELIMITER ;
CALL update_bankNumber();