Mysql建立預存程序,使用遊標Cursor迴圈更新

來源:互聯網
上載者:User

使用遊標(cursor)

1.聲明遊標

CURSOR FOR select_statement
這個語句聲明一個遊標。也可以在子程式中定義多個遊標,但是一個塊中的每一個遊標必須有唯一的名字。聲明遊標後也是單條操作的,但是不能用SELECT語句不能有INTO子句。

2. 遊標OPEN語句


這個語句開啟先前聲明的遊標。

3. 遊標FETCH語句

INTO var_name [, var_name] ...
這個語句用指定的開啟遊標讀取下一行(如果有下一行的話),並且前進遊標指標。

4. 遊標CLOSE語句

這個語句關閉先前開啟的遊標。

下面是建立預存程序,使用遊標迴圈更新操作的例子:

-- 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.idwhere area_info.i_record_status=0 and subbranch_info.i_record_status=0 group by area_info.id);  /*    mysql 不知道為什麼用異常加入判斷 ?          *        這把 遊標 異常後 捕捉         *        並設定 迴圈使用 變數 stop 為 null 跳出迴圈。          */ declare CONTINUE HANDLER FOR SQLSTATE '02000' SET stop = null;  /*開遊標*/OPEN cur;/*遊標向下走一步,將查詢出來的兩個值付給定義的兩個變數*/FETCH cur INTO mdsl,aid;/* 迴圈體 這很明顯 把遊標查詢出的 name 都加起並用 ; 號隔開 */WHILE ( stop is not null) DOupdate zlgsydrsp.area_info set  i_subbran_count=mdsl   where id = aid ;/*遊標向下走一步*/FETCH cur INTO mdsl,aid;END WHILE;CLOSE cur;END;


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.