数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Oracle游标使用总结


发布日期:2022年10月16日
 
Oracle游标使用总结

Oracle游标分为显示游标和隐式游标

显示游标(Explicit Cursor):在PL/SQL程序中定义的用于查询的游标称作显示游标

隐式游标(Implicit Cursor):是指非PL/SQL程序中定义的而且是在PL/SQL中使用UPDATE/DELETE语句时Oracle系统自动分配的游标

显示游标

使用步骤

()定义 ()打开 ()使用 ()关闭

使用演示

首先创建测试用表STUDENT脚本如下

()使用WHILE循环处理游标

create or replace PROCEDURE PROC_STU AS

BEGIN

显示游标使用使用while循环

declare

定义游标名称为cur_stu

cursor cur_stu is

select stunostuname from student order by stuno;

定义变量存放游标取出的数据

v_stuno varchar();

v_stuname varchar();

begin

打开游标cur_stu

open cur_stu;

将游标的当前行取出存放到变量中

fetch cur_stu into v_stunov_stuname;

while cur_stu%found 游标所指还有数据行则继续循环

loop

打印结果

dbms_outputPUT_LINE(v_stuno||>||v_stuname);

继续将游标所指的当前行取出放到变量中

fetch cur_stu into v_stunov_stuname;

end loop;

close cur_stu; 关闭游标

end;

END PROC_STU;

()使用IFELSE代替WHILE循环处理游标

create or replace PROCEDURE PROC_STU AS

BEGIN

显示游标使用使用if判断

declare

定义游标名称为cur_stu

cursor cur_stu is

select stunostuname from student order by stuno;

定义变量存放游标取出的数据

v_stuno varchar();

v_stuname varchar();

begin

打开游标cur_stu

open cur_stu;

将游标的当前行取出存放到变量中

fetch cur_stu into v_stunov_stuname;

loop

if cur_stu%found then 如果游标cur_stu所指还有数据行

打印结果

dbms_outputPUT_LINE(v_stuno||>||v_stuname);

继续将游标所指的当前行取出放到变量中

fetch cur_stu into v_stunov_stuname;

else

exit;

end if;

end loop;

close cur_stu; 关闭游标

end;

END PROC_STU;

()使用FOR循环处理游标

create or replace PROCEDURE PROC_STU AS

BEGIN

显示游标使用使用for循环

declare

定义游标名称为cur_stu

cursor cur_stu is

select stunostuname from student order by stuno;

begin

for stu in cur_stu

loop

dbms_outputPUT_LINE(stustuno||>||stustuname);

循环做隐含检查 %notfound

end loop;

自动关闭游标

end;

END PROC_STU;

()常用的使用EXIT WHEN处理游标

create or replace

PROCEDURE PROC_STU_ AS

BEGIN

显示游标使用使用exit when循环

declare

定义游标名称为cur_stu

cursor cur_stu is

select stunostuname from student order by stuno;

定义变量存放游标取出的数据

v_stuno varchar();

v_stuname varchar();

begin

打开游标cur_stu

open cur_stu;

loop

将游标的当前行取出存放到变量中

fetch cur_stu into v_stunov_stuname;

exit when cur_stu%notfound; 游标所指还有数据行则继续循环

打印结果

dbms_outputPUT_LINE(v_stuno||>||v_stuname);

end loop;

close cur_stu; 关闭游标

end;

END PROC_STU_;

隐式游标

使用演示

create or replace PROCEDURE PROC_STU AS

BEGIN

隐式游标使用

update student set stuname=张燕广 where stuno=;

如果更新没有匹配则插入一条新记录

if SQL%NOTFOUND then

insert into student(STUNOSTUNAMEAGEGENDER)

values(张燕广);

end if;

END PROC_STU;

说明

所有的SQL语句在上下文区内部都是可执行的因为都有一个游标指向上下文区此游标就是

SQL游标与现实游标不同的是SQL游标在PL/SQL中不需要打开和关闭而是在执行UPDATE

DELETE是自动打开和关闭

上面例子中就是通过SQL%NOTFOUND游标属性判断UPDATE语句的执行结果决定是否需要插入新记录CREATE TABLE STUDENT (

STUNAME VARCHAR( BYTE)

STUNO VARCHAR( BYTE)

AGE NUMBER

GENDER VARCHAR( CHAR)

)

上一篇:解决Oracle下的undo空间过大的问题

下一篇:在P4机器上安装Oracle 8i