oracle的游標筆記

2021-07-23 15:48:22 字數 2649 閱讀 6695

1. 游標

游標是一條sql語句執行之後的結果狀態資訊

1.1 隱式游標

當執行dml語句時,會自動建立隱式游標,包含

%found: 影響大於0條資料為true ,

%notfound:影響0條資料為true ,

%rowcount:影響資料的條數 ,

%isopen: 是否開啟,隱式游標始終為false

隱式游標的名稱叫做sql

declare

new_sal number;

new_empno number;

begin

new_sal := &newsal;

new_empno := &empno;

-- 修改值

update emp set sal = new_sal where empno = new_empno;

-- 執行完dml時,會建立隱式游標

if sql%found then

dbms_output.put_line('更新成功,本次更新了' || sql%rowcount || '條資料');

else

dbms_output.put_line('沒有更新到資料。');

endif; commit;

end;

-- 刪除建立隱式游標

begin

delete from salgrade;

if sql%rowcount > 0

then

dbms_output.put_line('刪除了很多資料');

endif; end;

1.2 顯示游標

顯示定義乙個查詢結果為游標

1.2.1 在宣告塊中聲明顯式游標物件

1.2.2 使用顯式游標之前必須開啟顯示游標

for迴圈迭代游標時會自動開啟游標,所以不能手動開啟

1.2.3 通過fetch關鍵字將游標中的資料行抓取到指定行型別

1.2.4 使用完游標,需要手動關閉

for迴圈使用完游標會自動關閉,無需手動關閉

declare

-- 宣告乙個顯示游標

cursor my_cursor is

select * from emp where deptno = 20;

-- 表示emp表的行型別

emp_row emp%rowtype;

begin

-- 顯示游標必須先開啟

open my_cursor;

loop

-- 通過fetch關鍵字抓取出一行資料

fetch my_cursor into emp_row;

-- 當游標中沒有資料可取時退出迴圈

exit

when my_cursor%notfound;

dbms_output.put_line('ename: ' || emp_row.ename || ', sal: ' || emp_row.sal);

endloop;

-- 使用完游標時需要關閉

close my_cursor;

end;

/* for迴圈操作游標。

無需手動開啟和關閉

無需宣告for迴圈的臨時變數

*/declare

-- 宣告乙個顯示游標

cursor my_cursor is

select * from emp where deptno = 20;

begin

-- for迴圈會自動開啟游標,無需手動開啟

for emp_row in my_cursor loop

dbms_output.put_line('ename: ' || emp_row.ename || ', sal: ' || emp_row.sal);

endloop;

end;

1.3 ref動態游標

declare

dno number;

emp_row emp%rowtype;

-- 首先宣告游標型別

type my_ref_cursor is ref cursor return emp%rowtype;

-- 使用游標型別宣告游標變數

-- cur_emp1 表示游標變數,是my_ref_cursor型別的游標變數

cur_emp1 my_ref_cursor;

begin

dno := &dno;

-- 動態游標是在open時才動態指定查詢sql

open cur_emp1 for

select * from emp where deptno = dno;

fetch cur_emp1 into emp_row;

-- 迴圈遍歷游標中的資料

while cur_emp1%found loop

dbms_output.put_line('ename: ' || emp_row.ename || ', sal: ' || emp_row.sal);

fetch cur_emp1 into emp_row;

endloop;

-- 關閉游標

close cur_emp1;

end;

-- ** for迴圈不能作用於ref動態游標

oracle游標筆記

游標 cursor 也叫游標,在關聯式資料庫中經常使用,在pl sql程式中可以用cursor與select一起對錶或者檢視中的資料進行查詢並逐行讀取。oracle游標分為顯示游標和隱式游標。顯示游標 explicit cursor 在pl sql程式中定義的 用於查詢的游標稱作顯示游標。隱式游標 ...

Oracle游標學習筆記

游標按以下操作進行 parse 解析 bind 繫結 open 開啟 execute 執行 fetch 回取 close 關閉 1.寫自己第乙個游標pl sql declare cursor c s is select from user tables begin open c s 開啟游標 clo...

oracle學習筆記(五)游標

游標在資料庫操作中有著十分重要的作用,它簡單地說就相當於指標,針對表中檢索出來的結果進行操作,游標分為顯示游標和隱式游標。顯示游標是使用者可以自己宣告和操作的,通常用於操作查詢結果集。通過他來處理資料主要分為四步驟,首先是宣告游標,其次是開啟游標,然後讀取游標,最後關閉游標。1.宣告游標必須指定名稱...