Oracle游標使用

2022-09-17 07:36:14 字數 3212 閱讀 8418

隱式游標和顯式游標:

1.查詢返回單行記錄時→隱式游標;

2.查詢返回多行記錄並逐行進行處理時→顯式游標;

游標的狀態是通過屬性來表示

%found :fetch語句(獲取記錄)執**況true or false。

%notfound : 最後一條記錄是否提取出true or false。

%isopen : 游標是否開啟true or false。

%rowcount :游標當前提取的行數 。

--fetch游標

--使用的時候必須要明確的開啟和關閉

寫法一:使用游標變數寫法

declare

--游標宣告

cursor c_job

isselect empno,ename,job,sal

from emp

where job='manager';

--定義乙個游標變數

c_row c_job%rowtype;

begin

open c_job;

loop

--提取一行資料到c_row

fetch c_job into c_row;

--判讀是否提取到值,沒取到值就退出

--取到值c_job%notfound 是false

--取不到值c_job%notfound 是true

exit when c_job%notfound;

dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);

end loop;

--關閉游標

close c_job;

end;

寫法二:使用變數寫法
declare
v_empno varchar2;

v_ename varchar2;

v_job varchar2;

v_sal varchar2;

--游標宣告

cursor c_job

isselect empno,ename,job,sal

from emp

where job='manager';

begin

open c_job;

loop

--提取一行資料到c_row

fetch c_job into v_empno,v_ename,v_job,v_sal;

--判讀是否提取到值,沒取到值就退出

--取到值c_job%notfound 是false

--取不到值c_job%notfound 是true

exit when c_job%notfound;

dbms_output.put_line(v_empno||'-'||v_ename||'-'||v_job||'-'||v_sal);

end loop;

--關閉游標

close c_job;

end;

--for 迴圈游標

--(1)定義游標

--(2)定義游標變數

--(3)使用for迴圈來使用這個游標

寫法一:使用游標變數寫法

declare

--型別定義

cursor c_job

isselect empno,ename,job,sal

from emp

where job='manager';

--定義乙個游標變數v_cinfo c_emp%rowtype ,該型別為游標c_emp中的一行資料型別

c_row c_job%rowtype;

begin

for c_row in c_job loop

dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);

end loop;

end;

寫法二:使用變數寫法

declare
v_empno varchar2;

v_ename varchar2;

v_job varchar2;

v_sal varchar2;

--型別定義

cursor c_job

isselect empno,ename,job,sal

from emp

where job='manager';

begin

for c_row in c_job loop

v_empno :=c_row.empno; v_ename :=c_row.ename; v_job :=c_row.job;v_sal :=c_row.sal;

dbms_output.put_line(v_empno ||'-'||v_ename ||'-'||v_job||'-'||v_sal);

end loop;

end;

--while迴圈來顯示所有部門的的地理位置(用%found屬性)

declare

--游標宣告

cursor csr_testwhile

is--select語句

select loc

from depth;

--指定行指標

row_loc csr_testwhile%rowtype;

begin

--開啟游標

open csr_testwhile;

--給第一行喂資料

fetch csr_testwhile into row_loc;

--測試是否有資料,並執行迴圈

while csr_testwhile%found loop

dbms_output.put_line('部門地點:'||row_loc.loc);

--給下一行喂資料

fetch csr_testwhile into row_loc;

end loop;

close csr_testwhile;

end;

select * from emp

總結用for迴圈來實現游標方便些,畢竟省去了開啟和關閉游標等步驟

oracle 游標使用

create or replace function errortyperead return varchar2 is result varchar2 3000 type cursor type is ref cursor tempname varchar2 100 cursor testcur i...

oracle游標使用

在進行pl sql程式設計時,我們都會使用游標,游標有兩種,一種是顯式游標,使用類似如下方式 open 游標 loop fetch into exit when notfound end loop close 游標 另一種是隱式游標,使用類似如下 for 游標變數 in 游標 loop 賦值變數 游...

Oracle游標使用

一,什麼是游標 遍歷查詢結果集的一種機制。二,為什麼避免使用游標 盡量避免使用游標,因為游標的效率較差 如果使用了游標,就要盡量避免在游標迴圈中再進行表連線的操作。三,使用游標的步驟 靜態游標 1,宣告一些變數,用來儲存游標遍歷過程的臨時資料 2,宣告游標,並且指定查詢 3,開啟游標 4,從游標中獲...