游标是一个指向返回数据集的指针,实际上是指Oracle服务器端内存中,也就是进程全局(PGA)中的一块上下午区域。也就是说游标实际上是指向SELECT 或DML语句执行后的一块内存的区域,而不是直接指向具体的数据。
每次记录被写到内存中后,游标就会打开,在这个内存区域中保存了如下的3类消息:
1、查询返回的数据行。
2、查询所处理的数据的行号。
3、指向共享池中已分析的SQL语句。
可以使用CURSOR语句定义一个游标,PL/SQL也会隐式地在执行任何DML语句或者SELECT INTO语句时创建隐式游标。使用游标的优势之一就是讲原本对数据集合的操作编程对结果集中的每一行进行处理。
使用如下:
DECLARE
ecprow buser%ROWTYPE; --定义保存游标及所结果行的记录变量
CURSOR buser_cur --定义游标
IS
SELECT * FROM buser; --查询语句
BEGIN
OPEN buser_cur; --打开游标
LOOP --循环检索游标
FETCH buser_cur --提取游标内容
INTO ecprow; --输出检索到的游标行的信息
DBMS_OUTPUT.put_line('id:' || ecprow.id || ',name' || ecprow.name ); --输出
EXIT WHEN buser_cur%NOTFOUND; --跳出LOOP条件,游标检索完后退出
END LOOP;
CLOSE buser_cur; --关闭游标
END;
执行结果
输出
游标可以处理一些很复杂的数据,进行高端的操作。这里的减少很少。以后有机会补充。