mysql,儲存過程,游標實現一次資料的批量修改

2021-10-12 03:00:10 字數 1625 閱讀 4444

背景

今天線上碰到乙個問題,現場進行了兩個伺服器的遷移,資料庫也進行了合併,導致表adm_dev的regist_proxy_port欄位出現重複資料(暫時

不考慮表結構設計問題),現在需要把此重複的資料修改

#一 使用mysql自帶的語法實現

updatemytableset

myfield =caseid

when1 then 『value』

when2 then 『value』

when3 then 『value』

end

whereid in (1,2,3)

由於case when語法的原因,解決大批量資料就需要超級長的sql,不適合我的場

#二 使用儲存過程,和游標實現

createprocedure pa() – 建立儲存過程

begin

declaredevicecode varchar(50); – 定義變數

declareproxyport int ; – 定義變數

declaremy_cursorcursorfor(selectdevice_codefromdss.adm_devwhereid in(1,2,3)); – 建立游標並且給游標賦值

openmy_cursor; – 開啟游標

fetch next frommy_cursorintodevicecode; – 取游標的第一行資料賦值給devicecode變數

setproxyport = 99; – proxyport變數初始化

www:loop– 迴圈進行修改

updatedss.adm_dev set regist_proxy_port = proxyportwheredevice_code = devicecode;

setproxyport = proxyport+1;

fetch next frommy_cursorintodevicecode;

end loop; – 迴圈結束

closemy_cursor; – 關閉游標

end;

callpa(); – 呼叫儲存過程

MySql 儲存過程 游標只迴圈一次

mqsql 儲存過程 游標只迴圈一次 針對mysql儲存過程,游標只迴圈一次就退出的場景,可能原因分析 1 儲存過程有問題 仔細檢查語法 控制變數 條件等等 2 保證儲存過程正確。呼叫過程異常 即游標失效 可能因為迴圈體內的sql語句使用了select語句,如果有乙個select語句查詢結果為空時,...

MySql 儲存過程 游標只迴圈一次

mqsql 儲存過程 游標只迴圈一次 針對mysql儲存過程,游標只迴圈一次就退出的場景,可能原因分析 1 儲存過程有問題 仔細檢查語法 控制變數 條件等等 2 保證儲存過程正確。呼叫過程異常 即游標失效 可能因為迴圈體內的sql語句使用了select語句,如果有乙個select語句查詢結果為空時,...

mysql 游標 儲存過程

1.首先需要注意的是mysql中游標必須要建立在儲存過程中 2.直接上sql 查詢當天資料 select in flow out flow from water meter data where 1 1 and date sys read time curdate 1 order by in flo...