pl/sql中光标cursor的使用笔记

cursor就是一个结果集,Result Set,可以从数据库中取出多个纪录。

cursor的使用:

光标赋值:cursor 光标名[(参数名 数据类型 [,参数名 数据类型])] is select语句;

         或者:cursor 光标名 is select语句;

使用时,需要先打开:open 光标名;     使用完要关闭:close 光标名;


取一行光标的值:fetch 光标名 into 变量名;

        fetch的作用:1、把当前指针指向的纪录返回

                                 2、将指针指向下一条纪录


光标的属性:

%found 值:true, false

%notfound 值:true, false

%isopen 判断光标是否打开

%rowcount 影响的行数


光标数的限制:

默认情况下,Oracle数据库只允许在同一个会话中,打开300个光标。所以一般语句中使用光标结束后,要关闭光标。

修改光标数的限制:

alter system set open_cursor=400 scope=both;--改为400

scope的取值:both(同时更改memory和spfile), memory(只更改当前实例,不更改参数文件), spfile(只更改参数文件,不更改当前实例,数据库需要重启)



例(不带参数的光标):

set serveroutput on--打开屏幕输出开关

declare--声明

--定义一个光标

cursor cstu is select no,name from students;

--定义对应变量, 以students表中对应字段的属性类型定义

stuno students.no%type;

stuname students.name%type;

begin

--打开光标

 open cstu;

--使用loop循环

 loop

  --光标初始指向第一天纪录,所以可以直接取一条纪录

  fetch cstu into stuno, stuname;--赋值时,对应select语句中的属性顺序,stuno第一,stuname第二

  --没取到纪录时退出循环

  exit when cstu%notfound;

  --打印

  dbms_output.put_line(stuname||"的学号是"||stuno);--||是pl/sql中的连接符,相当于java中的+号?

 end loop;

--关闭光标

 close cstu;

end;

/--这个/在语句结束时要有


例(带参数的光标):

set serveroutput on--打开屏幕输出开关

declare--声明

--定义一个光标

cursor cstu(clano number) is select name from students where classno=clano;

--定义对应变量,

stuname students.name%type;

begin

--打开光标

 open cstu(5);--打开5班的光标纪录

--使用loop循环

 loop

  --取学生姓名

  fetch cstu into stuname;--赋值

  --没取到纪录时退出循环

  exit when cstu%notfound;

  --打印

  dbms_output.put_line(stuname);

 end loop;

--关闭光标

 close cstu;

end;

/--这个/在语句结束时要有


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值