Oracle PL/SQL学习 之 游标

本文介绍了Oracle数据库中的游标概念,包括隐式游标和显式游标的区别,以及如何声明和使用显式游标。示例展示了游标的声明、打开、关闭及fetch操作,同时解释了%isopen、%found、%rowcount等属性的用法。此外,还提到了带参数和不带参数的显式游标,并提供了for循环遍历游标的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先上简单的例子,在oracle默认用户scott中可以运行

declare 

 cursor cur_1 is                  --声明游标cur_1   语法: cursor 游标名 is 查询语句
 select * from emp;
 e cur_1%rowtype;             -- %rowtype属性  表明为游标获取的一行数据对象 可以用e.列名 访问获取的数据

begin
  if not cur_1%isopen then --%isopen属性 判断游标是否打开
    open cur_1;
  end if;
  dbms_output.put_line(cur_1%rowcount);--游标执行最后fetch操作,取到的行数 输出0 因为无fetch操作
  fetch  cur_1  into e;
  while cur_1%found loop                          --最后一次执行fetch操作是否从游标取到一行数据,取到为true
    dbms_output.put_line(cur_1%rowcount||' '||e.empno||' '||e.ename||' '||e.job);
    fetch cur_1 into e;
  end loop;
  dbms_output.put_line(cur_1%rowcount);
  close cur_1;

end;

oracle游标是一种私有的工作区,用于保存SQL语句的执行结果。Oracle数据库中有两种形式的游标:隐式游标(系统自带的 比如SQL)和 显示游标(用户自定义 )。

上面例子,可以初步了解到游标的基本属性:%isopen  %fount %notfound %rowcount 并且基本的游标操作。

总结:1。oracle游标 分为两种,一种是oracle服务自带的,为隐式游标 ;第二种是用户可以自定义的显式游标。

隐式游标和显示游标在某些基本属性上是有区别的:

%rowcount  :

隐式: 其值是对于DML操作中受影响的数据行数。特别对于select语句 不发生异常其值为1.  这里注意select操作不发生异常只有情况一种,那就是查询结果有且只有一条结果返回。 因为当无结果时,会抛出NO_DATA_FOUND异常,当有多行数据时,返回TOO_MANY_ROWS异常。

显式:表明目前为止,用fetch语句已经获取到的行数。当无fetch操作是,其值为0;

 

%found:

隐式:对于DML操作中是否有数据受到影响。如果没有任何数据受到影响,其值为false。特别对于select操作,不发生异常其值为true.这里就可以知道什么查询结果为true了吧。

显示:表示最后一次fetch语句是否从游标中取到了数据,取到了为ture,没有取到为false.

2.显示游标也可以分为两种,一种带参数的,一种不带参数的。™定义如下:

declare

    cursor 游标名(参数1,参数2,.....)

    is  select 语句

   [for update ]--锁定游标查询的数据

其中参数列表格式为: 参数名 传递模式 参数类型 := 默认值;传递模式包括三种 in 、out 、 in out

使用游标方式

一般方式:

打开游标   :open 游标名;

获取游标内容:  fetch 游标名 into 对应的参数,这里可以使用%rowtype属性  获取游标对应的“行对象类型”

关闭游标:close 游标名。

所以步骤大致为:declare  ->  opne -> fetch -> close

由于游标更多的时间是获取多行记录,所以结合游标自身属性,通过循环语句进行遍历。这样就需要对各个属性有很清楚的认识。通过上面例子详细阐述了。先指出一个比较特别的循环for,在for循环中使用游标 无需打开、获取和关闭操作,都能很好的自动 完成。

使用格式:

for 变量名 in 游标名[(参数值...)] loop

end loop; 是时候将上面例子用for循环试试了!

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值