背景
今天線上碰到乙個問題,現場進行了兩個伺服器的遷移,資料庫也進行了合併,導致表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...