Mysql 遊標在資料庫當中引用

來源:互聯網
上載者:User

標籤:div   後台   工程師   and   遊標   state   存在   引用   結果   

  本人由於在某互連網公司擔任後台開發工程師,但是公司基礎資料較多,而且較為複雜。

  所以在開發前期就開發使用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 遊標在資料庫當中引用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.