1. 程式人生 > >Mysql 遊標在數據庫當中引用

Mysql 遊標在數據庫當中引用

數據 cnblogs 開發工程師 row drop sel 聲明 開發 lstat

  本人由於在某互聯網公司擔任後臺開發工程師,但是公司基礎數據較多,而且較為復雜。

  所以在開發前期就開發使用excel表格導入基礎數據,但是由於前期對業務了解,在書寫導入程序時原廠物料名稱沒有在名稱後面加入 ‘-原廠’ 字樣,經實際操作發現後立即修改程序;

  但是在此期間導入數據都未臟數據,為避免重復操作,使用了數據庫右邊批量處理檢索結果。

  以下為遊標使用實例。

 1 DROP PROCEDURE IF EXIEST re_name()
 2 CREATE PROCEDURE re_name()
 3 begin
 4     DECLARE s_did int(11);
 5     DECLARE
s_dname VARCHAR(80); 6 DECLARE stop int DEFAULT 0; 7 -- DECLARE fname VARCHAR(80); 8 DECLARE cur cursor for select did,dname from db_fittings where dQuality = 原廠 AND dname NOT LIKE %原廠% ; 9 declare CONTINUE HANDLER FOR SQLSTATE 02000 SET stop = null; 10 OPEN cur; 11 FETCH cur INTO
s_did,s_dname; 12 WHILE ( stop is not null ) DO 13 update `db_fittings` set `dname` = CONCAT(s_dname,-原廠) WHERE `did` = s_did; 14 FETCH cur INTO s_did,s_dname; 15 END WHILE; 16 CLOSE cur; 17 end

  以下解釋上面代碼作為記錄:

  首行如果存在就刪除存儲過程re_name();

  創建存儲過程re_name();

  聲明局部變量;

  聲明遊標;遊標的使用和變量相同需要先聲明:DECLARE cur cursor for select did,dname from db_fittings where dQuality = ‘原廠‘ AND dname NOT LIKE ‘%原廠%‘ ;

  以下申明在查詢出現異常是停止跳出循環:declare CONTINUE HANDLER FOR SQLSTATE ‘02000‘ SET stop = null;

  在使用右邊之前需要打開遊標:open cur

  使用FETCH 講查詢出來的結果賦予臨時變量:FETCH cur INTO s_did,s_dname

  然後再處理使用WHILE DO 循環處理遊標查詢結果

  關閉遊標。

  結算存儲過程。

  在書寫過程中遇到的問題

  原數據庫字段長度32 不夠長會導致出現 data too long for column ‘dname‘ at row 1 錯誤,再講長度32改為60之後程序正常運行,順利改名

Mysql 遊標在數據庫當中引用