游標使用2 常用屬性及引用游標

2021-07-13 17:14:17 字數 3111 閱讀 4544

隱式游標

四個常用的屬性

sql%found

sql%notfound

sql%isopen

sql%rowcount

declare

dept_no_number(4) :=50;

begin

delete from dept_temp where deptno=dept_no;

if sql%found then

insert into dept_temp values(50,』database』,』beijing』);

end if;

commit;

end;

/顯示游標

通常使用在plsql中,有我們顯示的控制open,fetch,close,有下面4個最常用的屬性

cursorname%found

cursorname%notfound

cursorname%isopen

cursorname%rowcount

declare

cursor c1 is select ename,sal from emp where rownum<11;

my_ename emp.ename%type;

my_salary emp.sal%typ;

begin

open c1;

loop

fetch c1 into my_ename,my_salary;

if c1%found then

dbms_output.put_line(『name=』||my_ename||』,salary=』||my_salary);

else

exit;

end if;

end loop;

close c1;

end;

/ 標準游標的使用方法

create or replace procedure p_demo_explicit_cursor_std is

cursor c1 is select * from emp where rownum<11;

emp_rec emp%rowtype;

begin

open c1;

fetch c1 into emp_rec;

while(c1%found) loop

dbms_output.put_line(『name=』||emp_rec.ename||』,salary=』||emp_rec.sal);

fetch c1 into emp_rec;

end loop;

close c1;

exception

when others then

…. rollback;

return;

end p_demo_explicti_curosor_std;

參考游標,參考游標與顯示游標很像也是在儲存過程中使用,常用的屬性有下面四個

與顯示游標的是一樣的。

主要有下面三個特性:

1定義方式靈活

2可以不與某個固定的sql繫結,可以隨時open,並且每次open所對應的sql語句都可以是不一樣的。

3可以作為儲存過程的輸入輸出

引用游標範例:

create package pck_refcursor_open_demo as

type gencurtyp is ref cursor;

procedure open_cv(generic_cv in out gencurtyp,choice int);

end pck_refcursor_open_demo;

/create package body pck_refcursor_oepn_demo as

procedure open_cv(generic_cv in out gencurtyp,choice int) is

begin

if choice=1 then

open generic_cv for select * from emp;

elsif choice=2 then

open generic_cv for select * from dept;

end if;

end;

end pck_refcursor_open_demo;

/引用游標中的批量取值

下面是一行一行取

declare

type empcurtyp is ref cursor return emp%rowtype;

emp_cv empcurtyp;

emp_rec emp%rowtype;

begin

open emp_cv for select * from emp where rownum<11;

loop

fetch emp_cv into emp_rec;

exit when emp_cv%notfound;

dbms_output.put_line(『name=』||emp_rec.ename);

end loop;

close emp_cv;

end;

/下面是批量取值

declare

type empcurtyp is ref cursor;

type namelist is table of emp.ename%type;

emp_cv empcurtyp;

names namelist;

begin

open emp_cv for select ename from emp where rownum<11;

fetch emp_cv bulk collect into names;

close emp_cv;

for i in names.first .. names.last

loop

dbms_output.put_line(『name=』||names(i));

end loop;

end;

/

Oracle 游標 引用游標

sql set severoutput on sp2 0735 unknown set option beginning severoutpu.sql set serveroutput on sql remark 引用游標 sql remark sql remark sql remark 引用游標 ...

使用游標 引數游標

參游標是指帶有引數的游標。在定義了引數游標之後,當使用不同引數值多次開啟游標時,可以生成不同的結果集。定義引數游標的語法如下 cursor cursor name parameter name datetype is select statement 注意,當定義引數游標時,游標引數只能指定資料型別...

使用游標 游標FOR迴圈

游標for迴圈是在pl sql塊中使用游標最簡單的方式,它簡化了對游標的處理。當使用游標for迴圈時,oracle會隱含的開啟游標,提取游標資料並關閉游標。例子 顯示emp表所有雇員名及其工資 declare cursor emp cursor isselect ename,sal from emp...