PL/SQL语句通过游标提供了对一个结果集进行逐行处理的能力。游标可以视为一种特殊的指针,它与某个查询结果相联系,可以指向结果集的任何位置,以便对指定位置的数据进行处理。使用游标可以在查询数据的同时对数据进行处理。游标分为显式游标和隐式游标两种。
一、显式游标
使用显示游标需要遵循声明游标——>打开游标——>读取数据——>关闭游标四个步骤。
1、声明游标
定义的方法如下:
declare cursor cursorName is select_statement
其中cursorName是游标名,select_statement是select语句,它是由该查询产生与所声明的游标像关联的结果集。
例如,以下是一个游标的定义实例:
declare cursor moduleCursor is select name,parent from t_module;
2、打开游标
声明游标后,在使用数据前,必须先打开游标。在PL/SQL中使用open语句打开游标,其格式为:
open cursorName
其中,cursorName是需要打开的游标的名字,打开游标后,可以使用系统变量%rowcount查看游标当前所在的位置。
示例,定义游标moduleCursor,然后打开游标,输出其当前所在的位置。
declare cursor moduleCursor is
select name,parent from t_module;
begin
open moduleCursor;
dbms_output.put_line(moduleCursor%rowcount);
end;
3、读取数据
打开游标后,就可以使用fetch语句从中读取数据了。fetch语句的语法格式为:
fetch cursorName [into variable_name,...n]
其中,cursorName表示从中提取数据的游标名,into表示将提取的数据存放到变量variable_name中去。
示例代码:
declare
moduleName char(20);
moduleId number(3);
cursor moduleCursor is
select id, name from t_module;
begin
open moduleCursor;
dbms_output.put_line(moduleCursor%ROWCOUNT);
fetch moduleCursor into moduleId, moduleName; --在进行found操作之前必须先进行一次fetch操作,否则游标不会指向结果集的开始,found操作永远返回false。
while moduleCursor%found
loop
dbms_output.put_line('ModuleName: ' || moduleName || ' , ModuleId: ' || moduleId);
fetch moduleCursor into moduleId, moduleName;
end loop;
close moduleCursor;
end;
在读取游标的数据的时候,也可以使用游标的for循环进行读取,把上述示例用for循环可以重写如下:
declare
moduleId number(3);
moduleName char(20);
cursor moduleCursor is
select id, name from t_module;
begin
for moduleCursorRecord in moduleCursor loop --moduleCursorRecord是一个临时变量,代表当前的一条记录
moduleId := moduleCursorRecord.id;
moduleName := moduleCursorRecord.name;
dbms_output.put_line('ModuleId:' || moduleId || ', ModuleName:' || moduleName);
end loop;
end;
有上述代码可知,在对游标进行循环取数据时,使用for循环可以大大减少代码量,增强代码的可读性。此外,使用for循环的时候,不需要显式的打开和关闭游标。
4、关闭游标
游标使用完以后,要及时关闭,释放所占的内存区。关闭游标使用close语句,格式如下:
close cursorName;
5、几点需要注意的地方
(1)用%found和%notfound检验游标成功与否。该属性表示当前的游标是否指向有效的一行,根据其返回值true或者false检查是否该结束游标的使用。如果游标不是指向结果集的末尾,则返回成功,在第一次fetch的时候,游标指向结果集的最前端,如果此时结果集中含记录,则%found将返回true,下一次执行fetch操作将使游标指向下一条记录的前端,如果该记录存在则%found将返回true,否则返回false。该测试必须在游标关闭前进行。
(2)游标目标变量必须与游标select表中的列的数据类型一致。
(3)如果试图打开一个已打开或者关闭一个已关闭的游标时将会出现错误。因此,在进行打开或者关闭操作前,如果不知道游标的当前状态,可以使用%isopen进行检查,再根据其返回值执行相应的打开或者关闭操作。
(4)可以使用%rowcount获取当前游标所在的位置。
二、隐式游标
如果在PL/SQL程序段中使用select语句进行操作,PL/SQL语言会隐含地处理游标定义,这就是隐式游标。这种游标不需要像显式游标一样的声明,也不需要打开和关闭。
以下是一段在方法中使用了隐式游标的说明:
create or replace function moduleNameFunc(moduleId in number)
return char
as
moduleName char(20);
begin
select name into moduleName from t_module where id = moduleId;
return moduleName;
end;
使用隐式游标需要注意以下几点:
(1)每一个隐式游标必须有一个into语句。
(2)into语句后接收数据的变量的数据类型要与对应的列的数据类型一致。
(3)隐式游标一次只能返回一条数据。
分享到:
相关推荐
### Oracle内部培训资料——游标知识点详解 #### 一、游标概述 游标是Oracle数据库中用于处理SQL查询返回的多行记录的一种机制。它允许用户逐行地访问查询结果,这对于处理不确定数量的数据非常有用。游标分为两种...
- **类型**:有两种主要类型的游标——隐式游标和显式游标。隐式游标由SQL语句(如SELECT INTO)自动管理,而显式游标则需要程序员手动声明、打开、读取、关闭等。 - **使用**:在PL/SQL中,通过声明、打开、提取...
阅读提供的文档如《Oracle+PLSQL语言入门》、《Oracle数据库PL-SQL学习资料之五——异常处理》和《oracle存储过程中的异常处理》,可以进一步深入学习这些概念并提升您的Oracle数据库编程技能。
在Oracle数据库中,一种新型的攻击方式——**游标注入**,允许攻击者在无需创建过程或函数的情况下执行任意SQL语句。这种攻击方法不仅降低了攻击门槛,也对现有的安全评估机制提出了挑战。 #### Oracle游标注入概述...
标题中的“oralce_游标_小葵花”暗示了我们今天将深入探讨Oracle数据库中的一个重要概念——游标。游标在数据库编程中扮演着关键角色,尤其在处理复杂的SQL查询和事务时,它们允许我们逐行处理结果集,而不仅仅是一...
通过这个"Oracle 11g从入门到精通——光盘源码"的压缩包,你可以实践这些知识点,将理论与实际操作相结合,从而更深入地理解Oracle数据库系统。同时,这些源码也可以帮助你在遇到问题时找到解决方案,或作为开发新...
### Oracle经典教程1——走进Oracle #### Oracle简介 Oracle是一种基于对象的关系型数据库管理系统,它由美国甲骨文公司开发并维护。Oracle数据库系统因其高度可靠性和强大的数据处理能力而闻名,广泛应用于各种...
实验六:PL/SQL——游标 游标是处理单条记录的机制,常用于循环处理查询结果。学生将学习如何定义和使用游标,以及如何在PL/SQL中实现数据的迭代处理。 实验七:Oracle对象管理及使用 这包括对表、视图、索引、存储...
这个“occi连接Oracle数据库——库文件.rar”压缩包显然包含了实现这一功能所需的库文件、动态链接库(dll)、静态库(lib)以及头文件(h)。下面将详细介绍如何使用OCII连接Oracle数据库以及这些文件的作用。 ...
- **应用程序首部**:定义了与 Oracle 数据库相关的变量,比如游标、环境和连接变量,以及错误处理等,为 C 代码操作数据库提供必要的上下文。 - **内部说明部分**:这部分包含对 Oracle 数据库对象的声明,如游标...
另外,还有一种特殊类型的游标——REF游标,用于处理运行时才能确定的动态SQL查询结果。REF游标可以处理多行数据,特别是在处理动态SQL语句时非常有用。 在处理SELECT INTO语句时,如果查询结果无匹配行,将引发NO_...
在深入学习Oracle数据库时,还会接触到更多高级概念,如索引、视图、存储过程、触发器、游标等,这些都是提升数据库性能和管理效率的关键。随着学习的深入,你将更熟练地运用这些工具和技巧来管理和操作数据库,为...
"Oracle 实用教材———web版"显然是一本专为初学者设计的教程,旨在通过Web方式进行Oracle 9i数据库的学习和实践。Oracle 9i是Oracle公司推出的第九个主要版本,它在功能上进行了许多优化和增强,尤其是在互联网...
### Oracle数据库技术——动态SQL详解 #### 一、动态SQL概述与应用场景 在Oracle数据库管理技术中,SQL语句按照其是否能在编译时确定,分为静态SQL与动态SQL两大类。静态SQL指的是那些在编写时就已经确定下来的SQL...
- **游标与游标变量**:游标用于在结果集上进行迭代,游标变量可以保存游标的状态,方便在程序中传递和操作。 在Oracle 8中,PL/SQL的这些特性使得开发人员能够编写复杂的数据库应用程序,处理事务、进行错误处理...
【cx_Oracle-5.2-11g.win-amd64-py2.7.exe】这个文件是针对Python编程语言的一个扩展库——cx_Oracle的安装程序,用于在Windows操作系统(64位版本)上与Oracle数据库进行交互。cx_Oracle是Python中的一个重要模块,...
【cx_Oracle-5.1.2-11g.win-amd64-py2.7.exe】这个文件是Python编程语言中用于连接Oracle数据库的一个重要组件——cx_Oracle库的安装程序。cx_Oracle是一个Python接口,它使得Python开发者能够方便地与Oracle数据库...
Oracle数据库是世界上最流行的数据库管理系统之一,它支持一种强大的编程语言——PL/SQL,用于处理数据库中的数据。在本次实验中,我们将重点探讨PL/SQL中的游标、过程、函数和包的使用,这些都是数据库开发中不可或...
这个“Oracle系统培训课件——资料包(7个ppt)”压缩文件包含了一系列PPT教程,旨在帮助学习者深入理解Oracle系统的各个方面。下面我们将详细探讨这些课件可能涵盖的关键知识点。 1. **Oracle概述**: - Oracle...