DELIMITER// #防止mysql遇到分號(;)就執行,換成//,后面遇到//才執行。 CREATE PROCEDURE setAccountIdFrameId() #創建名為setAccountIdFrameId存儲過程 BEGIN # 聲明變量 DECLARE accountids INT(11); DECLARE frameids VARCHAR(100); #定義結束標識 DECLARE done INT DEFAULT 0; # 定義一個游標來記錄sql查詢的結果 DECLARE cur CURSOR FOR SELECT a.accountid,f.frameid FROM nst_t_account a LEFT JOIN nst_t_accountmiddle m ON a.username= m.usr_login LEFT JOIN nst_t_frame f ON CONCAT(m.USR_UDF_SETID,m.USR_UDF_DEPTID)= f.framecode WHERE m.usr_login IS NOT NULL AND f.frameid IS NOT NULL; #定義游標的結束--當遍歷完成時,將DONE設置為1 DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; # 打開游標 OPEN cur; # 將游標向下移1行,獲取的數據放入之前定義的變量accountids,frameids中 FETCH NEXT FROM cur INTO accountids,frameids; -- 遍歷游標每一行 REPEAT IF NOT done THEN UPDATE nst_t_account SET frameid=frameids WHERE accountid=accountids; END IF; # 將游標向下移1行,獲取的數據放入之前定義的變量accountids,frameids中 FETCH NEXT FROM cur INTO accountids,frameids; UNTIL done END REPEAT; #關閉游標 CLOSE cur; END;//
CALL setAccountIdFrameId();//執行