使用游標(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)更新操作的例子:
-- Procedure "useCursor" DDLCREATE PROCEDURE `useCursor`()BEGIN /*局部變量的定義 declare*/ declare aid bigint default 0 ; declare mdsl bigint default 0; declare stop int default 0; declare cur CURSOR FOR (select count(area_info.id) as mdsl, area_info.id as aid from area_info right join subbranch_info on subbranch_info.i_subbran_area=area_info.id where area_info.i_record_status=0 and subbranch_info.i_record_status=0 group by area_info.id); /* mysql 不知道為什么用異常加入判斷 ? * 這把 游標(biāo) 異常后 捕捉 * 并設(shè)置 循環(huán)使用 變量 stop 為 null 跳出循環(huán)。 */ 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 zlgsydrsp.area_info set i_subbran_count=mdsl where id = aid ; /*游標(biāo)向下走一步*/ FETCH cur INTO mdsl,aid; END WHILE; CLOSE cur;END;
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com