国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

mysql的游標怎么使用

2024-07-24 12:38:28
字體:
來源:轉載
供稿:網友

個人覺得就是一個cursor,就是一個標識,用來標識數據取到什么地方了,你也可以把它理解成數組中的下標.

使用游標(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

這個語句關閉先前打開的游標.

例1,代碼如下:

  1. //建立表結構 
  2. create table person(name varchar(10)); 
  3.  
  4. insert into person values(¹a¹); 
  5. insert into person values(¹b¹); 
  6. insert into person values(¹c¹); 
  7. insert into person values(¹d¹); 
  8. insert into person values(¹e¹); 
  9.  
  10. //初始化  
  11. drop procedure if exists  cursorTest   
  12.  
  13. //建立 
  14. CREATE PROCEDURE cursorTest() 
  15.     BEGIN 
  16.  
  17.  //定義變量 
  18.          declare name1 varchar(10) default ¹¹ ; 
  19.          declare name2 varchar(100) default ¹¹ ; 
  20.  
  21.          declare mycursor CURSOR FOR select name from person; 
  22.  
  23.          declare CONTINUE HANDLER FOR SQLSTATE ¹02000¹ SET tmpname = null
  24.  
  25.  //打開游標  
  26.  OPEN mycursor; 
  27.  
  28.  //遍歷游標 
  29.  FETCH mycursor INTO name1; 
  30.  
  31.  //把游標查詢出的 name 都加起并用 ; 號隔開 
  32.  WHILE( name1 is not null) DO 
  33.   set name1 = CONCAT(name1, ";") ; 
  34.   set name2 = CONCAT(name2, name1) ; 
  35.   FETCH mycursor INTO name1; 
  36.  END WHILE; 
  37.  CLOSE mycursor; 
  38. --Vevb.com 
  39.  select mycursor; 
  40.     END
  41.  
  42. //調用游標 
  43. call mycursor() 
  44.  
  45.  
  46.  
  47. --運行結果: 
  48.  
  49. mysql> call mycursor() 
  50. +--------------------------------------+ 
  51.  
  52. | name2                                | 
  53.  
  54. +--------------------------------------+ 
  55.  
  56. | a;b;c;d;e;                           | 
  57.  
  58. +--------------------------------------+ 
  59.  
  60. 1 row in set (0.01 sec) 

例2,一個完整的例子,代碼如下:

  1. -- 定義本地變量 
  2.  
  3.   DECLARE o varchar(128); 
  4.  
  5.  
  6.  -- 定義游標 
  7.  
  8.  DECLARE ordernumbers CURSOR 
  9.  
  10.  FOR 
  11.  
  12.  SELECT callee_name FROM account_tbl where acct_timeduration=10800; 
  13.  
  14.  DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_departments=1; 
  15.  
  16.  SET no_more_departments=0; 
  17.  
  18.   
  19.  -- 打開游標 
  20.  
  21.  OPEN ordernumbers; 
  22.  
  23.  
  24.  -- 循環所有的行 
  25.  
  26.  REPEAT 
  27.  
  28.      -- Get order number 
  29.  
  30.     FETCH ordernumbers INTO o; 
  31.  
  32.     update account set allMoney=allMoney+72,lastMonthConsume=lastMonthConsume-72 where NumTg=@o; 
  33.     
  34.     
  35. -- 循環結束 
  36.  
  37.     UNTIL no_more_departments 
  38.    END REPEAT; 
  39.  
  40.  -- 關閉游標 
  41.  
  42.  CLOSE ordernumbers; 

游標(cursor)的特性

1,只讀的,不能更新的.

2,不滾動的.

3,不敏感的,不敏感意為服務器可以活不可以復制它的結果表.

游標(cursor)必須在聲明處理程序之前被聲明,并且變量和條件必須在聲明游標或處理程序之前被聲明.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永德县| 那坡县| 上饶县| 翁源县| 沅江市| 合肥市| 汕头市| 武胜县| 安吉县| 醴陵市| 东辽县| 商水县| 新龙县| 亚东县| 盐边县| 雷州市| 四平市| 水城县| 石林| 淳化县| 龙井市| 芜湖县| 含山县| 民乐县| 敦化市| 汝城县| 新乡县| 隆安县| 克拉玛依市| 陈巴尔虎旗| 义乌市| 逊克县| 丰城市| 万年县| 红桥区| 正阳县| 安龙县| 乌什县| 新昌县| 阜宁县| 凤城市|