sql 中CURSOR 的使用

2021-08-27 20:41:42 字數 2660 閱讀 9180

原文路徑(

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,...

endclose 游標名稱

deallocate 游標名稱 (刪除游標)

一般格式sql舉例如下:

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

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 的使用

cursor是游標,常用於指令碼處理。這裡主要介紹自己常用的方法,同時也會把網上的一般格式進行解釋。declare 游標名稱 cursor for select 欄位1,欄位2,欄位3,from 表名 where open 游標名稱 fetch next from 游標名稱 into 變數名1,變數...

Android中cursor類的使用

android中從資料庫中查出來的資料一般都存在cursor中即 cursor mcursor msqlitedatabase.query select form table null 說白了就是乙個資料集合,具體的說就是每行資料集合,下面是api中對cursor的解釋 關於 cursor,1,cu...

Android中cursor類的使用

android中從資料庫中查出來的資料一般都存在cursor中即 cursor mcursor msqlitedatabase.query select form table null 說白了就是乙個資料集合,具體的說就是每行資料集合,下面是api中對cursor的解釋 關於 cursor,1,cu...