Oracle Cursor游標的使用

2021-07-08 09:20:45 字數 2880 閱讀 4498

1、宣告游標

2、開啟游標

3、逐行讀取游標中的資料,進行處理。

4、關閉游標

open

---開啟游標

found --- 判斷有沒有受影響的資料

notfound --- 判斷有沒有受影響的資料

isopen --- 判斷游標是否開啟

rowcount --- 返回受影響的行數

fetch --- 向下移動一步游標

close

--- 關閉游標

隱式游標中select..into 語句,當執行的時候會有三種可能:

(1).結果集只含有一行,且select是成功的

(2).沒有查詢到任何結果集,引發no_data_found異常

(3).結果集中含有兩行或者更多行,引發too_many_rows異常。

//使用方式: sql%found …

declare

v_emp emp%rowtype;

begin

select * into v_emp from emp where empno = '7369';

if sql%isopen then

//當sql語句執行完畢後,隱式游標自動關閉

dbms_output.put_line('open');

endif; if sql%found then

dbms_output.put_line('found');

endif; dbms_output.put_line(sql%rowcount);

end;

/

輸出結果:

found

1

1、採用for迴圈的方式移動游標
//採用for迴圈的方式,oracle將游標的open、fetch、close自動完成。[推薦使用]

declare

cursor cur_emp is select * from emp;

begin

for v_emp in cur_emp loop

dbms_output.put_line(v_emp.empno||' '||v_emp.ename);

end loop;

end;

/

2、採用while迴圈的方式
//需要自己手動開啟、移動、關閉游標,並需要判斷當前游標是否有資料

declare

v_emp emp%rowtype;

cursor cur_emp is

select * from emp;

begin

open cur_emp;

fetch cur_emp into v_emp;

while cur_emp%found loop

dbms_output.put_line(v_emp.empno||' '||v_emp.ename);

fetch cur_emp into v_emp;

endloop;

close cur_emp;

end;

/

//類似do…while…結構

/*1、宣告乙個游標型別,並指定游標的返回型別為emp%rowtype

2、用宣告的型別來建立變數 [變數名 型別]

3、游標賦值 open cur_emp for

select * from emp;

4、使用並關閉游標

*/declare

type emp_ref is ref cursor return emp%rowtype;

cur_emp emp_ref;

v_emprow emp%rowtype;

begin

open cur_emp for

select * from emp;

loop

fetch cur_emp into v_emprow;

exit

when cur_emp%notfound;

dbms_output.put_line(v_emprow.empno||' '||v_emprow.ename);

end loop;

close cur_emp;

end;

/

//while迴圈結構

declare

type emp_ref is ref cursor return emp%rowtype;

cur_emp emp_ref;

v_emprow emp%rowtype;

begin

open cur_emp for

select * from emp;

fetch cur_emp into v_emprow;

while cur_emp%found loop

dbms_output.put_line(v_emprow.empno||' '||v_emprow.ename);

fetch cur_emp into v_emprow;

endloop;

end;

/

sql> select *

2from (select row_.*, rownum rownum_

3from (select *

4from test

5order

by id asc) row_

6where rownum <= 20)

7where rownum_ >= 10;

Cursor游標(游標)的使用

為了處理sql語句,oracle 將在記憶體中分配乙個區域,這就是上下文區。這個區包含了已經處理完的行數 指向被分析語句的指標,整個區是查詢語句返回的資料行集。游標就是指向上下文區控制代碼或指標。兩種游標 一 顯示游標 需要明確定義!顯示游標被用於處理返回多行資料的select 語句,游標名通過cu...

游標的使用

declare sql varchar 8000 password varchar 200 密碼 tbname varchar 500 資料庫.dbo.表名,如果不指定 dbo.表名,則匯出資料庫的所有使用者表 filename varchar 1000 匯入 匯出路徑 檔名,如果 tbname引數...

游標的使用

游標 cursor 是處理資料的一種方法,為了檢視或者處理結果集中的資料,游標提供了在結果集中一次以行或者多行前進或向後瀏覽資料的能力。我們可以把游標當作乙個指標,它可以指定結果中的任何位置,然後允許使用者對指定位置的資料進行處理。1.游標的組成 游標包含兩個部分 乙個是游標結果集 乙個是游標位置。...