Oracle 游标

 

游标是一个对象,能够提供行级的sql语句控制。PL/SQL用游标来管理sqlselect语句,游标是为处理这些语句而分配的一大块内存。

 

一.游标的基本操作

1.声明游标

包括两部分:游标名称和这个游标所用到的sql语句:

Cursor   游标名称   is   查询语句(select语句);

声明游标的这段代码是不执行的,不能将debug时的断点设在这一行上,也不能用if...end  if语句来声明两个同名的游标。

实例:

Cursor employer  is

Select  ename ,job ,sal ,deptno

From  emp

Order by  sal;

2.打开游标

要使用一个已经声明的游标,必须先打开它,语法:

Open  游标名称;

当打开一个游标时,和该游标相关的sql语句就会传递到oracle平台上,并执行。

实例:

Open employer

3.提取数据

使用fetch语句从游标中取出数据,该语句每次返回一行数据;每次取数据时,pl/sql都将指向通过游标查询要返回行的下一行数据。语法:

Fetch  游标名称

Into   {变量1[,变量2,......]}

实例:

Fetch employer  into   Hunter

将游标employer中的数据存入记录型变量Hunter

❤注意:

·对游标第一次执行fetch语句时,它将工作区中的第一条记录赋值给变量,并使工作区内的指针指向下一条记录。这样,如果在一个循环内反复使用fetch语句,就可以检查工作区的每一条记录。

·工作区的游标指针只能向下移动,不能回退。如果查询完第二条记录后又想返回到第一条记录,必须关闭游标在重新打开。

·在使用fetch语句前,必须先打开游标,这样才能保证工作区内有数据。

·into子句中的变量个数、顺序和类型必须与工作区中没行记录的字段数、顺序以及数据类型一一对应。

4.关闭游标

使用完游标后要关闭游标,以便释放游标所占用的资源,语法:

Close  游标名称;

实例:

Close employer

 

二.游标属性

游标有四个属性,他们的语法格式为:

游标名[属性名]

游标名和属性名之间没有空格

属性

返回值

说明

ISOPEN

TRUE/FALSE

指出游标是否关闭

FOUND

TRUE/FALSE

指出是否发现一条记录

NOTFOUND

TRUE/FALSE

指出是否没有发现一条记录

ROWCOUNT

NUMBER

每次提取记录的序列数(第一,第二,第三,...)

实例:

关闭游标:if  (bookA%isopen)  then

  closebookA;

         end  if; 

从游标book_list中读取数据到记录bookA中:

...

Loop

Fetch book_list  into bookA;

...

Exit when  book_list%notfound;

                    End  Loop;

                        只有在游标第一次取回数据时,%found%notfound才会返回一个有效值。在打开游标和第一次取回数据这两个操作期间这两个属性的值为空。

 

三.参数化游标和隐式游标

       1.参数化游标

              参数化游标是需要参数的游标,当声明时,它可以声明一个或者多个游标参数,在运行pl/sql程序用它来定义游标的记录选择标准。

语法:

cursor 游标名称(字段1    [in]数据类型{:=|default} 初始化),…

[return返回值类型] is 查询语句(select 语句);

当打开参数化游标是,为其传递参数;

返回类型可有可无,可以是用户定义记录、数据库表记录类型或独立的变量;

Select子句中定义的列必须与用于接收返回值的参数一一对应。

       2.隐式游标

在使用隐式游标时,用户无需进行声明、打开及关闭,只要简单地编码select语句并让pl/sql根据需要处理游标即可。

与循环结构结合的显示游标处理返回多于一行的select语句,与循环结合的游标将允许用户每次处理一行,当。

select语句预计只返回一行时,适于采用隐式游标。

注意

·每个隐式游标必须有个一关键字inot

·和显式游标一样,带有关键字into接收数据的变量时数据类型要与表列的一致

·隐式游标一次仅返回一行,使用时必须检查异常。

 

四.游标变量

       在所有的pl/sql中对游标的访问都是通过游标变量实现的,它总是特殊的数据类型refcursor

1.    创建

方法一,将变量声明为refcursor类型的变量;方法二,使用游标声明语法:

游标变量名  cursor [(参数)]  is select  查询语句

实例:

Declare

             Curs1refcursor;

             Curs2cursor is select * from emp;

             Cres3cursor(empNo number(4)) is select * from emp where empno=empNo;

2.    打开

3中形式的open语句

下面前两种open形式,游标未打开,最后一种形式是游标已经打开

·openfor select

语法:open 未绑定的游标变量 for select查询语句;

实例:opencurs1 is select * from emp

·open  for execute

语法:open  未绑定的游标变量  is execute  select 查询语句;

实例:open  curs1 is  execute  select * from emp;

·open一个绑定的查询

语法:open 绑定的游标变量 [(参数值)]

实例:opencurs1open  curs2’8705’;

3.    使用

游标打开之后就可以使用了;操作游标可以发生在函数里,用户可以从函数中返回一个refcursor数值,然后让调用者操作该游标,语法:

Fetch 游标变量 into 目标;

Fetch从游标中检索下一行到目标中。目标可以是一行变量,一个记录变量,护着一个用逗号分隔的普通变量的列表。

实例:

Fetch curs1 into aaa

Fetch curs2 into  gggfff

4.    关闭

当游标变量不使用时就将其关闭,以释放它所占用的资源;若要使用,可以在下一次使用时将其打开,语法:

Close  游标变量;

 

     --the  end--

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值