您的位置:首页 > 数据库 > Oracle

Oracle中游标的使用

2012-04-06 21:40 471 查看
游标(CURSOR)

用来处理使用select语句从数据库中检索到的多行记录的工具

游标的分类

显示游标

返回多条记录时,使用显示游标逐行读取

隐式游标

PL/SQL自动为DML语句创建隐式游标,包含一条返回记录

游标的属性

%found 用于检验游标是否成功,通常在FETCH语句前使用,当游标按照条件查询出一条记录时,返回true

%isopen 判断游标是否处于打开状态,视图打开一个已经打开或者已经关闭的游标,将会出现错误

%notfound 与%found的作用相反,当按照条件无法查询到记录时,返回true

%rowcount 循环执行游标读取数据时,返回检索出的记录数据的行数

游标的声明

CURSOR cursor_name [ ( parameter [ , parameter]……)]

[ RETURN return_type ] IS selectsql

CURSOR:用于声明一个游标

parameter:可选参数,用于指定参数类型、模式等

return:可选,指定游标的返回类型

selectsql:需要处理的select语句,不能含INTO子句

打开游标

open cursor_name

提取游标

FETCH cursor_name INTO variable_list

使用FETCH语句实现对游标内容的读取

variable_list必须与从游标提取的结果集类型相同

关闭游标

close cursor_name

使用CLOSE语句关闭一个游标

关闭游标后,所有资源都将被释放,且不能再次被打开

例如下面是一个从游标中取出一条记录的例子

Declare

fname varchar2(20);

lname varchar2(20);

--声明一个游标

CURSOR c_student is

select firstname, LASTNAME

from students where id=1001 ;

BEGIN

--打开游标

OPEN c_student;

--判断游标是否返回记录

if c_student%NOTFOUND THEN

dbms_output.put_line('没有找到相应的记录');

else

--从游标中读取记录

fetch c_student into fname,lname;

dbms_output.put_line(fname||''||lname);

end if;

CLOSE c_student;

END;

那么如何取出所有的值呢?看一下下面的例子

Declare

fname varchar2(20);

lname varchar2(20);

CURSOR t_student is

select firstname, LASTNAME

from students where id<=1005 ;

BEGIN

for t_students IN t_student LOOP

fname:=t_students.firstname;

lname:=t_students.lastname;

dbms_output.put_line('学员姓名:'||fname||''||lname);

end LOOP;

end;

本文链接:http://www.snowdi.com/729.html → 转载请注明文章出自雪頔网
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle list 数据库 工具 c