日期:2014-05-16  浏览次数:20585 次

oracle 游标详解 简单实例

游标-----内存中的一块区域,存放的是select 的结果

游标用来处理从数据库中检索的多行记录(使用SELECT语句)。利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集。

为了处理SQL语句,Oracle将在内存中分配一个区域,这就是上下文区。这个区包含了已经处理完的行数、指向被分析语句的指针,整个区是查询语句返回的数据行集。游标就是指向上下文区句柄或指针。

两种游标:
一、显示游标(需要明确定义!)

显示游标被用于处理返回多行数据的SELECT 语句,游标名通过CURSOR….IS 语句显示地赋给SELECT 语句。

在PL/SQL中处理显示游标所必需的四个步骤:

1)声明游标;CURSOR cursor_name IS select_statement

2)为查询打开游标;OPEN cursor_name

3)取得结果放入PL/SQL变量中;

FETCH cursor_name INTO list_of_variables;

FETCH cursor_name INTO PL/SQL_record;

4)关闭游标。CLOSE cursor_name

注意:在声明游标时,select_statement不能包含INTO子句。当使用显示游标时,INTO子句是FETCH语句的一部分。
1、 显式游标
select语句上 使用显式游标
能明确访问结果集
for循环游标
参数游标
解决多行记录的查询问题
fetch游标
二、隐式游标
所有的隐式游标都被假设为只返回一条记录。
使用隐式游标时,用户无需进行声明、打开及关闭。PL/SQL隐含地打开、处理,然后关掉游标。
例如:
…….
SELECT studentNo,studentName

INTO curStudentNo,curStudentName

FROM StudentRecord

WHERE name=’gg’;

上述游标自动打开,并把相关值赋给对应变量,然后关闭。执行完后,PL/SQL变量curStudentNo,curStudentName中已经有了值。
2、 隐式游标
单条sql语句所产生的结果集合
用关键字SQL表示隐式游标
4个属性 %rowcount 影响的记录的行数 整数
%found 影响到了记录 true
%notfound 没有影响到记录 true
%isopen 是否打开 布尔值 永远是false
多条sql语句 隐式游标SQL永远指的是最后一条sql语句的结果
主要使用在update 和 delete语句上


实际操作和例子:

?

1.建立一张表 mine, 属于sanydnc 用户,

列名:sid(number),sname(varchar2(10)),sage(number),插入一些数据;

2.打开一个sql窗口,并写入


declare
--sname_cursor sanydnc.mime.sname%type;--(引用mine表的字段sname的类型)
sname_cursor varchar2(10);
--total_id_cursor sanydnc.mime.sid%type;--(引用mine表的字段sid的类型)
total_id_cursor varchar2(10);
vage sanydnc.mime.sage%type;
cursor my_cursor is
select sname,round(sum(sid)/1,2) as total_id from sanydnc.mime where sanydnc.mime.sage<vage group by sname order by sname;
--vrow my_cursor%rowtype;--(引用定义的游标的一行记录的类型)
begin
vage := 10;

open my_cursor;
fetch my_cursor into sname_cursor,total_id_cursor;
DBMS_OUTPUT.PUT_LINE(sname_cursor||total_id_cursor);
close my_cursor;
end;