溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Mysql創(chuàng)建存儲過程,使用游標(biāo)Cursor循環(huán)更新

發(fā)布時(shí)間:2020-07-23 00:31:44 來源:網(wǎng)絡(luò) 閱讀:491 作者:沙漏半杯 欄目:編程語言

使用游標(biāo)(cursor)


1.聲明游標(biāo)


DECLARE cursor_name CURSOR FOR select_statement

這個(gè)語句聲明一個(gè)游標(biāo)。也可以在子程序中定義多個(gè)游標(biāo),但是一個(gè)塊中的每一個(gè)游標(biāo)必須有唯一的名字。聲明游標(biāo)后也是單條操作的,但是不能用SELECT語句不能有INTO子句。


2. 游標(biāo)OPEN語句


OPEN cursor_name

這個(gè)語句打開先前聲明的游標(biāo)。


3. 游標(biāo)FETCH語句


FETCH cursor_name INTO var_name [, var_name] ...

這個(gè)語句用指定的打開游標(biāo)讀取下一行(如果有下一行的話),并且前進(jìn)游標(biāo)指針。


4. 游標(biāo)CLOSE語句


CLOSE cursor_name

這個(gè)語句關(guān)閉先前打開的游標(biāo)。




寫之前查了好多資料但是總是執(zhí)行不了,后來自琢磨了一下,寫了個(gè)例子,經(jīng)過測試完全正確。


下面是創(chuàng)建存儲過程,使用游標(biāo)循環(huán)更新操作的例子:


?

CREATE PROCEDURE `my`()

BEGIN

? ? /*局部變量的定義 declare*/

? declare aid bigint default 0 ;

? declare mdsl bigint default 0;

? declare stop int default 0;

? declare cur CURSOR FOR (select? count(area_tb.id)? as mdsl, area_tb.id as aid from area_tb right join subbranch_tb on subbranch_tb.i_subbran_area=area_tb.id

where area_tb.i_record_status=0 and subbranch_tb.i_record_status=0 group by area_tb.id);

?

?declare CONTINUE HANDLER FOR SQLSTATE '02000' SET stop = null;

? /*開游標(biāo)*/

OPEN cur;

/*游標(biāo)向下走一步,將查詢出來的兩個(gè)值付給定義的兩個(gè)變量*/

FETCH cur INTO mdsl,aid;

/* 循環(huán)體 這很明顯 把游標(biāo)查詢出的 name 都加起并用 ; 號隔開 */

WHILE ( stop is not null) DO

update area_tb set? i_subbran_count=mdsl where id = aid ;

/*游標(biāo)向下走一步*/

FETCH cur INTO mdsl,aid;

END WHILE;

CLOSE cur;

END;


最后別忘了:給連接數(shù)據(jù)庫的用戶授予執(zhí)行存儲過程的權(quán)限


grant execute on procedure yunzuche.myupdate to '用戶名'@'%';

歡迎工作一到五年的Java工程師朋友們加入Java技術(shù)交流群:659270626
群內(nèi)提供免費(fèi)的Java架構(gòu)學(xué)習(xí)資料(里面有高可用、高并發(fā)、高性能及分布式、Jvm性能調(diào)優(yōu)、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx和大數(shù)據(jù)等多個(gè)知識點(diǎn)的架構(gòu)資料)合理利用自己每一分每一秒的時(shí)間來學(xué)習(xí)提升自己,不要再用"沒有時(shí)間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個(gè)交代!

?


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI