oracle 初識游標

2021-04-15 00:11:46 字數 3391 閱讀 5095

--游標大串燒

--一、游標分類:

--1.靜態游標:編譯時才確定elect語句。

--1)隱式游標:使用者不能直接控制的靜態游標(自動開,自動取,自動關)

--當使用者用update,delete,insert,select(帶into)時,自動產生隱式游標。

--游標名字為:sql

--相關屬性:%found,%notfound,%isopen,%rowcount.

--exp 1.1.1:

begin

update emp set sal=sal+1 where empno > &emp_no;

if sql%found then

dbms_output.put_line('更新了'||sql%rowcount||'行');

else

dbms_output.put_line('沒找到');

end if;

end;

--exp 1.1.2:

declare

emp_row emp%rowtype;

begin

select * into emp_row from emp where ename like '&e_name';

if sql%found then

dbms_output.put_line('編號:'||emp_row.empno||' 名字:'||emp_row.ename);

end if;

exception

when no_data_found then

dbms_output.put_line('沒有找到');

when too_many_rows then

dbms_output.put_line('太多了');

when others then

dbms_output.put_line('莫名其妙'); 

end;

--2)顯示游標:使用者要自己控制的靜態游標

--操作步驟:

--a)宣告游標  b)開啟游標  c)取記錄  d)關游標

--exp 1.2.1:顯示游標的查詢

declare

emp_row emp%rowtype;

cursor emp_cur is select * from emp;  --a)

begin

open emp_cur;  --b)

loop

fetch emp_cur into emp_row;  --c)

exit when emp_cur%notfound;

dbms_output.put_line('編號:'||emp_row.empno||'  名字:'||emp_row.ename);

end loop;

close emp_cur;  --d)

end;

--exp 1.2.2:顯示游標的更新

declare

emp_row emp%rowtype;

cursor emp_cur is select * from emp where empno>&emp_no for update;

begin

open emp_cur;

loop

fetch emp_cur into emp_row;

exit when emp_cur%notfound;

update emp set sal=sal+100 where current of emp_cur;

dbms_output.put_line('更新了編號為'||emp_row.empno||'姓名是'||emp_row.ename||'的員工,更新後工資為'||emp_row.sal||'元');

end loop;

close emp_cur;

commit;

end;

--2.ref游標:執行時才確定select語句.

--由游標型別和游標變數組成。

--游標型別:

--1)強型別:指的是在宣告游標型別時帶return type,這樣在游標取值時只能取相對應的型別。

--2)弱型別:不帶return type,這樣在取值時不論什麼值都能取。

--游標變數:宣告為游標型別的變數。

--exp:2.2.1

declare

type emp_cur_type is ref cursor;

emp_cur emp_cur_type;

emp_row emp%rowtype;

begin

open emp_cur for

'select * from emp';

loop

fetch emp_cur into emp_row;

exit when emp_cur%notfound;

dbms_output.put_line('編號:'||emp_row.empno||' 姓名:'||emp_row.ename);

end loop;

close emp_cur;

end;

--exp:2.2.2:帶引數的ref游標

declare

type emp_cur_type is ref cursor;

emp_cur emp_cur_type;

emp_row emp%rowtype;

e_name emp.ename%type default '&e_name';

begin

open emp_cur for

'select * from emp where ename like :1'

using e_name;

loop

fetch emp_cur into emp_row;

exit when emp_cur%notfound;

dbms_output.put_line('編號:'||emp_row.empno||'姓名:'||emp_row.ename);

end loop;

close emp_cur;

end;

--3.迴圈游標

--特性:

--a)在游標中取完記錄後自動停止。(即,不需要exit when)

--b)自動提取記錄。(即:不用fetch into)

--c)自動關閉游標。(即:不用close)

declare

cursor emp_cur is

select * from emp;

begin

for emp_row in emp_cur

loop

dbms_output.put_line('編號:'||emp_row.empno||' 姓名:'||emp_row.ename);

end loop;

end;

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游標總結

1.利用游標顯示職工號 來廠日期 職位 部門號 部門名 部門所在地 工資所處的等級。declare outempno int outhiredate date outjob varchar 10 outdeptno int outloc varchar 10 outgrade int cursor ...

Oracle游標例子

功能 將已啟用活動的期間公升級到tbhdqj 版權 王茂健 declare v slnm varchar2 36 cursor mycursor is select tbfasl slnm from tbfasl where tbfasl stat 1 begin open mycursor fet...