`
234390216
  • 浏览: 10238641 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462891
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1775976
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1398746
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:395157
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:680171
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:531145
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1185007
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:468818
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151493
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:68344
社区版块
存档分类
最新评论

Oracle——11游标

阅读更多

 


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)隐式游标一次只能返回一条数据。

0
2
分享到:
评论

相关推荐

    oracle内部培训资料——游标

    ### Oracle内部培训资料——游标知识点详解 #### 一、游标概述 游标是Oracle数据库中用于处理SQL查询返回的多行记录的一种机制。它允许用户逐行地访问查询结果,这对于处理不确定数量的数据非常有用。游标分为两种...

    ORACLE 游标 异常 存储过程

    - **类型**:有两种主要类型的游标——隐式游标和显式游标。隐式游标由SQL语句(如SELECT INTO)自动管理,而显式游标则需要程序员手动声明、打开、读取、关闭等。 - **使用**:在PL/SQL中,通过声明、打开、提取...

    ORACLE游标与异常处理

    阅读提供的文档如《Oracle+PLSQL语言入门》、《Oracle数据库PL-SQL学习资料之五——异常处理》和《oracle存储过程中的异常处理》,可以进一步深入学习这些概念并提升您的Oracle数据库编程技能。

    oracle 游标注入

    在Oracle数据库中,一种新型的攻击方式——**游标注入**,允许攻击者在无需创建过程或函数的情况下执行任意SQL语句。这种攻击方法不仅降低了攻击门槛,也对现有的安全评估机制提出了挑战。 #### Oracle游标注入概述...

    oralce_游标_小葵花

    标题中的“oralce_游标_小葵花”暗示了我们今天将深入探讨Oracle数据库中的一个重要概念——游标。游标在数据库编程中扮演着关键角色,尤其在处理复杂的SQL查询和事务时,它们允许我们逐行处理结果集,而不仅仅是一...

    Oracle+11g+从入门到精通——光盘源码

    通过这个"Oracle 11g从入门到精通——光盘源码"的压缩包,你可以实践这些知识点,将理论与实际操作相结合,从而更深入地理解Oracle数据库系统。同时,这些源码也可以帮助你在遇到问题时找到解决方案,或作为开发新...

    Oracle经典教程1——走进Oracle

    ### Oracle经典教程1——走进Oracle #### Oracle简介 Oracle是一种基于对象的关系型数据库管理系统,它由美国甲骨文公司开发并维护。Oracle数据库系统因其高度可靠性和强大的数据处理能力而闻名,广泛应用于各种...

    现代数据库技术实验指导书(oracle).doc

    实验六:PL/SQL——游标 游标是处理单条记录的机制,常用于循环处理查询结果。学生将学习如何定义和使用游标,以及如何在PL/SQL中实现数据的迭代处理。 实验七:Oracle对象管理及使用 这包括对表、视图、索引、存储...

    occi连接Oracle数据库——库文件.rar

    这个“occi连接Oracle数据库——库文件.rar”压缩包显然包含了实现这一功能所需的库文件、动态链接库(dll)、静态库(lib)以及头文件(h)。下面将详细介绍如何使用OCII连接Oracle数据库以及这些文件的作用。 ...

    ORACLE3——Pro_C_的使用.doc

    - **应用程序首部**:定义了与 Oracle 数据库相关的变量,比如游标、环境和连接变量,以及错误处理等,为 C 代码操作数据库提供必要的上下文。 - **内部说明部分**:这部分包含对 Oracle 数据库对象的声明,如游标...

    北大青鸟Oracle ppt6

    另外,还有一种特殊类型的游标——REF游标,用于处理运行时才能确定的动态SQL查询结果。REF游标可以处理多行数据,特别是在处理动态SQL语句时非常有用。 在处理SELECT INTO语句时,如果查询结果无匹配行,将引发NO_...

    Oracle学习笔记——day01

    在深入学习Oracle数据库时,还会接触到更多高级概念,如索引、视图、存储过程、触发器、游标等,这些都是提升数据库性能和管理效率的关键。随着学习的深入,你将更熟练地运用这些工具和技巧来管理和操作数据库,为...

    Oracle 实用教材———web版

    "Oracle 实用教材———web版"显然是一本专为初学者设计的教程,旨在通过Web方式进行Oracle 9i数据库的学习和实践。Oracle 9i是Oracle公司推出的第九个主要版本,它在功能上进行了许多优化和增强,尤其是在互联网...

    Oracle数据库技术——动态SQL

    ### Oracle数据库技术——动态SQL详解 #### 一、动态SQL概述与应用场景 在Oracle数据库管理技术中,SQL语句按照其是否能在编译时确定,分为静态SQL与动态SQL两大类。静态SQL指的是那些在编写时就已经确定下来的SQL...

    Oracle 8基础——对服务器编程

    - **游标与游标变量**:游标用于在结果集上进行迭代,游标变量可以保存游标的状态,方便在程序中传递和操作。 在Oracle 8中,PL/SQL的这些特性使得开发人员能够编写复杂的数据库应用程序,处理事务、进行错误处理...

    cx_Oracle-5.2-11g.win-amd64-py2.7.exe

    【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

    【cx_Oracle-5.1.2-11g.win-amd64-py2.7.exe】这个文件是Python编程语言中用于连接Oracle数据库的一个重要组件——cx_Oracle库的安装程序。cx_Oracle是一个Python接口,它使得Python开发者能够方便地与Oracle数据库...

    Oracle数据库实验-PLSQL游标、过程、函数、包的使用[文].pdf

    Oracle数据库是世界上最流行的数据库管理系统之一,它支持一种强大的编程语言——PL/SQL,用于处理数据库中的数据。在本次实验中,我们将重点探讨PL/SQL中的游标、过程、函数和包的使用,这些都是数据库开发中不可或...

    oracle系统培训课件——资料包(7个ppt).rar

    这个“Oracle系统培训课件——资料包(7个ppt)”压缩文件包含了一系列PPT教程,旨在帮助学习者深入理解Oracle系统的各个方面。下面我们将详细探讨这些课件可能涵盖的关键知识点。 1. **Oracle概述**: - Oracle...

Global site tag (gtag.js) - Google Analytics