Oracle中的游标

                                        Oracle中的游标

      游标(Cursor)在PL/SQL中可以增强SQL语句的功能,游标是用来查询数据、获取结果集中记录的指针。它可以让开发者在结果集中访问结果集中的一行。游标以编程的方式访问数据,从而完成在结果集的每个记录上的操作。也就是说,游标就是结果集中的记录指针,该指针指向查询结果集中的某一行。

游标可以分为两类:静态游标和REF游标。静态游标是在编译时和对应的查询语句绑定在一起,静态游标可以分为隐式游标和显示游标。REF游标(应用游标)和对应的查询语句只有在运行时才能决定,在开发时一般用REF游标和游标变量实现,为了使用REF游标必须使用游标变量。REF游标又可分为两种引用游标:强返回类型游标和弱返回类型游标。

那么如何使用游标呢?首先,声明一个游标,就是将一个查询语句绑定到游标上,声明时,查询语句并不执行。声明游标的语法如下:

Cursor 游标名[(参数)]  [return 返回值类型]  is select语句

游标声明中,可以有参数,可以有返回值,规定返回值类型,游标声明中的select中不能有into子句。

Open命令用于打开游标,打开游标时,与绑定的select语句开始执行。并且查询的结果集中,游标指针默认的指向第一个值(行)。

Open  游标名[(参数)]

若游标有参数,则打开游标时,就要为游标传实际参数。

从游标中提取数据,使用fetch语句可以从打开的游标中检索数据   ,每次检索一行,fetch完之后,游标自动定位到下一行。语法是:

Fetch  游标名 into 变量名

Fetch命令常写在循环里面,用于从结果集中检索一行数据,如果是多列,则要定义多个变量,或者一个记录类型的变量接受。

使用完游标之后,应该关闭游标,语法是:

Close 游标名

游标属性:

%found   如果fetch到值,则%found返回值是true,如果fetch不到值,则%found返回值是false

       %notfound  %found的意思正好相反。

   %rowcount  表示每fetch成功一次,rowcount就自动加1,初始值为0,表示返回值返回成功的行数。

   %isopen    判断游标是否已经打开,true是打开,false是未打开。

下面是例子:

declare

cursorname testss.names%type;

cursor cursorss is select names from testss;

begin

  open cursorss;

  loop

    fetch cursorss into cursorname;

     exit when cursorss%notfound;//退出条件

    insert into test values(default,cursorname);

    end loop;

    close cursorss;

end;   

 

如果带参数,则如下:

declare

cursorname testss.names%type;

cursor cursorss(canshu number) is select names from testss where id=canshu;

begin

  open cursorss(1);

  loop

    fetch cursorss into cursorname;

     exit when cursorss%notfound;

    insert into test values(default,cursorname);

    end loop;

    close cursorss;

end;

关于声明变量部分和声明游标部分,放在declare中,在begin中打开游标并且使用。需要注意的是,游标一定要有退出条件,不然会陷入死循环,有可能会摧毁数据或者数据库。使用游标的好处是可以对查询出的满足条件的逐条记录进行操作。比频繁的打开数据库,操作数据,关闭数据库更方便,更高效。虽然所占的内存增加了,但是对于批处理的数据,是很好的解决办法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值