oracle游标

目录

 

1游标 

1.1 定义游标

1.2 打开游标

1.3 从游标中获取数据

1.4 游标for循环

1.5 游标属性


1游标 

游标:是构建在PL/SQL中用来记录查询数据库结果的指针,他能够一次性访问一行结果集。允许以编程的方式访问数据,在oralce 系统中分为显示游标和隐式游标。

1.1 定义游标

主要是定义一个名词来对应一条sql查询语句,从而可以利用该游标对查询结果集进行业务操作。

语法 cursor cursor_name [(parameter....) ] [return result_type] is select statement

cursor_name 游标名称

parameter 输入参数,用户在使用游标时输入参数辅助,也可以使用默认值。输入参数有多个,用逗号分隔

return result_type 操作返回类型 可选项

select statement 将要处理的查询语句

如:

declare
 cursor test (dept number:=10)
 is
 select * from emp where dept:=dept;
 begin
 ..
end;

1.2 打开游标

在声明过游标以后,该游标并不会被oracle执行,只有在打开过游标后才能执行查询语句。在打开游标过程中,如果有输入参数,这时候需要为这些参数赋值。

语法 open cursor_name [value[....]]

当打开游标时会完成以下几件事情:

  • 检查联遍变量的取值
  • 根据取值,确定活动集
  • 活动集的指针指向第一行
open test(10)

1.3 从游标中获取数据

在打开游标后,如果想获取结果集中的数据,就需要从游标中获取数据,这时候使用fetch语句,把获取的单行数据保存到定义的变量中。

语法: fetch cursor_name into variable(,...) /pl/sql记录

游标中包含一个数据行指针,打开游标后,指针指向结果集的第一行,fetch每执行一次,游标向后移动一行,直到结束,游标只能逐个向后移动,不能跳跃移动或者向前移动。当游标的最后一条记录是不存在的,为空时,表示数据行已经遍历完成,这时候游标的%found 属性为false。

1.4 游标for循环

使用for循环可以遍历游标,在打开游标的过程中,不需要打开和关闭游标,也不需要手动判断游标是否还有返回记录。并在for循环语句中设置的循环变量值存储了当前检索记录的所有值,所以不需要定义变量接受记录值。

语法: for var_record in cursor_name loop

            pl/sql statement

            end loop;

            var_record 类型变量  cursor_name 游标名称  pl/sql statement pl/sql 语句

declare
cursor test (dept number:=10) -- 定义游标
is 
    select * from emp where dept=dept ;
    begin
       for current in test loop
       ....
       end loop;
end;

1.5 游标属性

在游标检索的过程中检索的时单行数据,而游标返回的时一个结果集合,存在多行数据。这时候如何知道检索的数据是结果集中的那一行,这时候我们就用到游标的属性%isopen %found %notfound %rowcount 。这些属性描述游标操作的执行情况。这些属性只能存在PL/SQL的流程控制语句中,而不能使用在sql语句中

1%found

该属性表示当前游标是否指向有效一行,返回结果为布尔值。通过这个属性我们可以判断是否结束游标的使用

2% notfound

该属性表示当前游标是否指向有效一行,返回结果为布尔值。通过这个属性我们可以判断是否结束游标的使用。这个属性值与%found类型 但是值正好相反。

3%rowcount

该属性为当前游标所在的行数。这个属性在循环判断中有效,这时候不必检索所有行,就可以中断操作。

4%isopen 

是否打开游标

declare

  vid  number;-- 声明变量
  cursor test (vno number) is -- 定义游标
  select * from emp where dept= vno;
begin
  if test%isopen = false then  -- 判断游标是否打开
   open test(20)
  end if;
  fetch test into vid ; -- 读取当前游标的数据
  while test%found  ;   -- 如果游标有效,则执行循环
  loop
    if test%rowcount = 4 then
      exit
    end if;
  end loop;
end;

参考oracle 从入门到精通

下一篇 oracle 存储过程 https://blog.csdn.net/lilongwangyamin/article/details/104405655

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值