oracle游标 包总结,Oracle 游标使用总结

Oracle 游标使用总结

更新时间:2009年10月01日 01:34:38   作者:

游标(CURSOR)也叫光标,在关系数据库中经常使用,在PL/SQL程序中可以用CURSOR与SELECT一起对表或者视图中的数据进行查询并逐行读取。

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

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

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

一.显示游标1.使用步骤

(1)定义 (2)打开 (3)使用 (4)关闭

2.使用演示

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

CREATE TABLE "STUDENT" (

"STUNAME" VARCHAR2(10 BYTE),

"STUNO" VARCHAR2(4 BYTE),

"AGE" NUMBER,

"GENDER" VARCHAR2(2 CHAR)

)

(1).使用WHILE循环处理游标

create or replace PROCEDURE PROC_STU1 AS

BEGIN

--显示游标使用,使用while循环

declare

--1.定义游标,名称为cur_stu

cursor cur_stu is

select stuno,stuname from student order by stuno;

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

v_stuno varchar(4);

v_stuname varchar(20);

begin

--2.打开游标cur_stu

open cur_stu;

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

fetch cur_stu into v_stuno,v_stuname;

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

loop

--打印结果

dbms_output.PUT_LINE(v_stuno||'->'||v_stuname);

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

fetch cur_stu into v_stuno,v_stuname;

end loop;

close cur_stu; --4.关闭游标

end;

END PROC_STU1;

(2).使用IF..ELSE代替WHILE循环处理游标

create or replace PROCEDURE PROC_STU2 AS

BEGIN

--显示游标使用,使用if判断

declare

--1.定义游标,名称为cur_stu

cursor cur_stu is

select stuno,stuname from student order by stuno;

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

v_stuno varchar(4);

v_stuname varchar(20);

begin

--2.打开游标cur_stu

open cur_stu;

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

fetch cur_stu into v_stuno,v_stuname;

loop

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

--打印结果

dbms_output.PUT_LINE(v_stuno||'->'||v_stuname);

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

fetch cur_stu into v_stuno,v_stuname;

else

exit;

end if;

end loop;

close cur_stu; --4.关闭游标

end;

END PROC_STU2;

(3).使用FOR循环处理游标

create or replace PROCEDURE PROC_STU3 AS

BEGIN

--显示游标使用,使用for循环

declare

--定义游标,名称为cur_stu

cursor cur_stu is

select stuno,stuname from student order by stuno;

begin

for stu in cur_stu

loop

dbms_output.PUT_LINE(stu.stuno||'->'||stu.stuname);

--循环做隐含检查 %notfound

end loop;

--自动关闭游标

end;

END PROC_STU3;

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

create or replace

PROCEDURE PROC_STU1_1 AS

BEGIN

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

declare

--1.定义游标,名称为cur_stu

cursor cur_stu is

select stuno,stuname from student order by stuno;

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

v_stuno varchar(4);

v_stuname varchar(20);

begin

--2.打开游标cur_stu

open cur_stu;

loop

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

fetch cur_stu into v_stuno,v_stuname;

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

--打印结果

dbms_output.PUT_LINE(v_stuno||'->'||v_stuname);

end loop;

close cur_stu; --4.关闭游标

end;

END PROC_STU1_1;

二.隐式游标

1.使用演示

create or replace PROCEDURE PROC_STU4 AS

BEGIN

--隐式游标使用

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

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

if SQL%NOTFOUND then

insert into student(STUNO,STUNAME,AGE,GENDER)

values('1104','张燕广',18,'男');

end if;

END PROC_STU4;

2.说明

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

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

DELETE是自动打开和关闭。

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

相关文章

1a1b05c64693fbf380aa1344a7812747.png

本篇文章是对oracle定时备份压缩的实现步骤进行了详细的分析介绍,需要的朋友参考下2013-05-05

4f55910a645b073bc4fc65dc10dc14bd.png

这篇文章主要介绍了哪些服务是Oracle 11g必须开启的以及这些服务的详细介绍,需要的朋友可以参考下2014-08-08

0ea3c7666119d5615e582f823fb3fad6.png

这篇文章主要介绍了Oracle重建索引Shell脚本、SQL脚本分享,索引是提高数据库查询性能的有力武器,定期重建索引是很有必要的事情,需要的朋友可以参考下2014-09-09

4f96a78db829b1556ff16de21e013c7a.png

这篇文章主要介绍了Oracle 获取表注释和列注释的相关资料,需要的朋友可以参考下2017-07-07

8cc1031babc6aff2319f1c6af8544aa0.png

这篇文章主要介绍了oracle表空间的创建及dmp 文件的导入,需非常不错,具有参考借鉴价值,要的朋友可以参考下2017-08-08

0c932a99bb7b6f23c937db507070cc7b.png

ORACLE应用经验(2)...2007-03-03

cca732bf65a93ed2ec0ac80c638460fe.png

这篇文章主要介绍了PLSQL配置远程Oracle数据库连接的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-09-09

2d9f31f2af7b675a3d153d2b7f1035a7.png

Oracle数据仓库的分层管理器解决方案开发者网络Oracle...2007-03-03

b452cee8ec5cd9e58ab98eba17281e59.png

本文介绍了通过Oracle10g发送Email的实例,该Procedure支持中文邮件、HTML代码、多收件人。 ,需要的朋友可以参考下2014-01-01

f4838ec7e2d4da28e0b57d4e852dadd4.png

下面小编就为大家带来一篇巧妙解决Oracle NClob读写问题(经验分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-10-10

最新评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值