您好,登錄后才能下訂單哦!
使用游標(cursor)
1.聲明游標
DECLARE cursor_name CURSOR FOR select_statement
這個語句聲明一個游標。也可以在子程序中定義多個游標,但是一個塊中的每一個游標必須有唯一的名字。聲明游標后也是單條操作的,但是不能用SELECT語句不能有INTO子句。
2. 游標OPEN語句
OPEN cursor_name
這個語句打開先前聲明的游標。
3. 游標FETCH語句
FETCH cursor_name INTO var_name [, var_name] ...
這個語句用指定的打開游標讀取下一行(如果有下一行的話),并且前進游標指針。
4. 游標CLOSE語句
CLOSE cursor_name
這個語句關閉先前打開的游標。
寫之前查了好多資料但是總是執行不了,后來自琢磨了一下,寫了個例子,經過測試完全正確。
下面是創建存儲過程,使用游標循環更新操作的例子:
?
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;
? /*開游標*/
OPEN cur;
/*游標向下走一步,將查詢出來的兩個值付給定義的兩個變量*/
FETCH cur INTO mdsl,aid;
/* 循環體 這很明顯 把游標查詢出的 name 都加起并用 ; 號隔開 */
WHILE ( stop is not null) DO
update area_tb set? i_subbran_count=mdsl where id = aid ;
/*游標向下走一步*/
FETCH cur INTO mdsl,aid;
END WHILE;
CLOSE cur;
END;
最后別忘了:給連接數據庫的用戶授予執行存儲過程的權限
grant execute on procedure yunzuche.myupdate to '用戶名'@'%';
歡迎工作一到五年的Java工程師朋友們加入Java技術交流群:659270626
群內提供免費的Java架構學習資料(里面有高可用、高并發、高性能及分布式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx和大數據等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!
?
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。