mysql 儲存過程批量更新

2021-09-02 19:56:22 字數 1966 閱讀 5910

最近做乙個批量更新的操作,由於是臨時需求,就想著在資料庫直接操作,不在**裡動手了,結合網上的一些資料,做如下處理:

1.先建立乙個臨時表,匯入需要變動的資料;

drop table if exists t_barcode;

create table `t_barcode` (

`barcode` varchar(32) default null,

`quantity` double default null comment '修改數量'

) engine=innodb default charset=utf8;

-- ----------------------------

-- procedure structure for my_batch_update

-- ----------------------------

2.建立儲存過程,從游標當中取臨時表的資料,逐一呼叫更新的儲存過程

drop procedure if exists `my_batch_update`;

delimiter ;;

create  procedure `my_batch_update`()

begin

declare

nodata int default 0 ; #注意:這個變數宣告必須放在游標宣告前面

declare

barcode varchar (20) ;

declare

quantity double ;

declare                       -- 1、定義乙個游標mycursor

mycursor cursor for 

select

tb.barcode barcode,

tb.quantity

from

t_barcode tb ;

declare exit handler for not found 

set nodata = 1 ; -- 當讀到資料的最後一條時,設定變數為1  declare  continue handler for notfound

open mycursor ;    -- 2、開啟游標

while nodata = 0 do     -- 3 判斷是不是到了最後一條資料

-- 4、使用游標獲取列的值

fetch next from mycursor into barcode,quantity ; -- 4、顯示結果

call my_batch_upadae_stock (barcode,quantity) ;

end while ; 

-- 5、關閉游標

close mycursor ;

end;;

delimiter ;

3.建立更新的儲存過程

-- ----------------------------

-- procedure structure for my_batch_upadae_stock

-- ----------------------------

drop procedure if exists `my_batch_upadae_stock`;

delimiter ;;

create procedure `my_batch_upadae_stock`(in barcode varchar(30),in quantity double)

begin

update t_repertory_detail set quantity = quantity where bar_code =barcode;

update t_transitbox_last_record set quantity=quantity where bar_code =barcode;

end;;

delimiter ;

4.呼叫過程

call my_batch_update();

儲存過程批量更新

批量更新 mysql更新語句很簡單,更新一條資料的某個字段,一般這樣寫 複製 如下 update mytable set myfield value where other field other value 如果更新同一欄位為同乙個值,mysql也很簡單,修改下where即可 複製 如下 upda...

用儲存過程批量更新表

下面這個和我的很相似,不用自己寫了,就用他的吧!最近做了乙個需求,需要批量更新資料庫 表,但是因為涉及到的資料較多 千萬條 如果直接用sql更新,估計會把pl sql弄垮 sql如下 update online product set online flag 0 where status on 所以...

mysql 儲存過程遞迴呼叫批量更新的問題

mysql 遞迴呼叫 背景 表結構為上下級關係,想批量更新乙個字段。過程 在寫儲存過程的時候,temp id當初寫的是使用者變數 set temp id 0 執行結果自增這個變數始終沒生效,但當我去掉遞迴的時候,一層一層呼叫,就是正確的。解決方式 將 temp id 換成區域性變數就行了 decla...