日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sql 中CURSOR 的使用

發布時間:2024/4/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql 中CURSOR 的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

sql 中CURSOR 的使用http://www.bieryun.com/3273.html

CURSOR是游標,常用于腳本處理。

這里主要介紹自己常用的方法,同時也會把網上的一般格式進行解釋。

一、游標一般格式:

DECLARE 游標名稱 CURSOR FOR SELECT 字段1,字段2,字段3,... FROM 表名 WHERE ...
OPEN 游標名稱
FETCH NEXT FROM 游標名稱 INTO 變量名1,變量名2,變量名3,...
WHILE @@FETCH_STATUS=0
BEGIN
SQL語句執行過程... ...
FETCH NEXT FROM 游標名稱 INTO 變量名1,變量名2,變量名3,...
END
CLOSE 游標名稱
DEALLOCATE 游標名稱 (刪除游標)

一般格式sql舉例如下:

[sql] view plain copy

  • ?table1結構如下
  • ?id????int
  • ?name??varchar(50)
  • ?
  • ?declare?@id?int
  • ?declare?@name?varchar(50)
  • ?declare?cursor1?cursor?for?????????--定義游標cursor1
  • ?select?*?from?table1???????????????--使用游標的對象(跟據需要填入select文)
  • ?open?cursor1???????????????????????--打開游標
  • ?
  • ?fetch?next?from?cursor1?into?@id,@name??--將游標向下移1行,獲取的數據放入之前定義的變量@id,@name中
  • ?
  • ?while?@@fetch_status=0???????????--判斷是否成功獲取數據???進入循環
  • ?begin
  • ?update?table1?set?name=name+'1'
  • ?where?id=@id???????????????????????????--進行相應處理(跟據需要填入SQL文)
  • ?
  • ?fetch?next?from?cursor1?into?@id,@name??--將游標向下移1行??相當于for(int?i;i<n;i++)?中的i+1
  • ?end
  • ?
  • ?close?cursor1???????????????????--關閉游標
  • ?deallocate?cursor1
  • 其中while循環的判斷條件:

    @@FETCH_STATUS =0 ? FETCH 語句成功
    @@FETCH_STATUS =-1 FETCH 語句失敗或此行不在結果集中

    @@FETCH_STATUS =-2 被提取的行不存在

    二、我常用的一般格式:

    DECLARE 游標名稱 CURSOR FOR SELECT * FROM 表名 WHERE ...

    begin
    dbms_output.enable(buffer_size=>null);
    for 變量名 in 游標名稱 loop

    SQL語句執行過程... ... 獲取游標里的值 直接用 變量名.字段名

    END LOOP;
    CLOSE 游標名稱
    DEALLOCATE 游標名稱 (刪除游標)

    三、嵌套循環:

    案例: 紅色部分是對于第二點常用格式上的添加,使得可以在循環中嵌套循環

    declare TYPE daynamic_cursor_type IS REF CURSOR; --黃色部分自定義 cursor bscl_mc_cur is SELECT d.bscl_mc FROM DB_YWBZ.ecm_bscl_common_content_data@db_ywbz_sc_old d WHERE d.bscl_mc is not null group by d.bscl_mc; cur_zj_rows daynamic_cursor_type; --定義游標 v_sql varchar2(500); v_zj varchar2(10); begin dbms_output.enable(buffer_size=>null); for v_bscl_mc_cur in bscl_mc_cur loop v_sql := 'SELECT zj,ZJ_DM FROM ecm_bscl_common_content_data d WHERE d.bscl_mc = '||chr(39)||v_bscl_mc_cur.bscl_mc||chr(39); --引號,記得加 dbms_output.put_line('=========='||v_bscl_mc_cur.bscl_mc); open cur_zj_rows for v_sql; LOOP FETCH cur_zj_rows INTO v_zj; --獲取值 EXIT WHEN cur_zj_rows%NOTFOUND; --判斷是否存在值 dbms_output.put_line(v_zj); --操作 END LOOP; end loop; end;

    總結

    以上是生活随笔為你收集整理的sql 中CURSOR 的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。