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

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 Database 11g初学者指南--详细书签版

     ·核心概念——oracle database 11g主题呈现在按逻辑组织的章节中  ·主要内容——每章要介绍的具体内容列表  ·实践练习——演示如何应用在每章学到的关键技术  ·学习效果测试——对学习效果的快速自我评估 ...

    oracle数据库11G初学者指南.Oracle.Database.11g,.A.Beginner's.Guide

    核心概念——Oracle Database 11g主题呈现在按逻辑组织的章节中 主要内容——每章要介绍的具体内容列表 实践练习——演示如何应用在每章学到的关键技术 学习效果测试——对学习效果的快速自我评估 注意——与所介绍...

    21天学通Oracle

    第9章 游标(教学视频:36分钟) 162 第10章 触发器(教学视频:58分钟) 178 第11章 序列(教学视频:28分钟) 206 第12章 用户角色与权限控制(教学视频:45分钟) 215 第三篇 Oracle中的SQL 第13章 Oracle...

    Oracle 11g 从入门到精通——第五章(视频教程)

    共计5个视频: 01 PL SQL简介 02 数据类型、变量和常量 03 流程控制语句 04 PL SQL游标 05 PL SQL异常处理

    Oralce数据库SQL语句优化技术分析

    有关oracle的,游标,存储过程,函数,包,触发器等等都有详细的介绍,并有开发的实例

    Oracle 10g 开发与管理

    补充资料——oracle安装时出现的问题 12 第二讲 Oacle数据库体系结构 14 一. 物理存储结构——(数据库载体) 14 1.数据文件(.DBF) 14 2.日志文件 (.Log) 14 1) 日志文件 15 2) 数据库工作模式 15 3.控制文件...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    2. oracle11G自带一个卸载批处理\app\Administrator\product\11.2.0\dbhome_1\deinstall\deinstall.bat 3. 运行该批处理程序将自动完成oracle卸载工作,最后手动删除\app文件夹(可能需要重启才能删除) 4. 运行...

    oracle实验报告

    (5)在未使用显式游标的情况下,使用SELECT语句必须保证只有一条记录返回,否则会产生异常情况。 [例3-1] 问题:编写一个过程,求和运算。 SET SERVEROUTPUT ON; DECLARE a number:=1; BEGIN a:=a+5; DBMS_...

    Oracle 教程电子书 3本压缩 精心推荐

    2.深入浅出Oracle:DBA入门、进阶与诊断案例 ——盖国强 3.Oracle 书籍《Oracle 11g 实用教程》 引言 ............................................................................................................

    PLSQLDeveloper下载

    集成调试器(要求Oracle 7.3.4或更高)——该调试器提供您所需要的全部特性:跳入(Step In)、跳过(Step Over)、跳出(Step Out)、异常时停止运行、断点、观察和设置变量、观察全部堆栈等。基本能够调试任何...

    NHibernate 学习文章

    很久以前,你可能习惯了connection.open,command.execute("select...")这样的代码,写啊写啊,你开始不停地copy/paste,因为数据库的操作太雷同了,还好,粘粘贴贴倒也凑合,然后有一天客户说他们要用oracle,于是...

    php网络开发完全手册

    13.3.2 ORACLE 207 13.3.3 SYBASE 207 13.3.4 DB2 207 13.3.5 SQL Server 207 13.4 SQL语言简介 207 13.5 常见的数据库设计问题 208 13.6 关系型数据库的设计原则 209 13.6.1 第一范式(1NF) 209 13.6.2 第二范式...

    亮剑.NET深入体验与实战精要2

    1.4.1 继承——“子承父业” 28 1.4.2 委托——“任务书” 35 1.4.3 事件——“年终分红” 42 1.4.4 反射——“解剖” 49 1.5 .NET开发几把小刀 52 1.5.1 using之多变身 52 1.5.2 @符号的妙用 54 1.5.3 预处理指令,...

    亮剑.NET深入体验与实战精要3

    1.4.1 继承——“子承父业” 28 1.4.2 委托——“任务书” 35 1.4.3 事件——“年终分红” 42 1.4.4 反射——“解剖” 49 1.5 .NET开发几把小刀 52 1.5.1 using之多变身 52 1.5.2 @符号的妙用 54 1.5.3 预处理指令,...

    javaSE代码实例

    第11章 异常处理——Java世界的医生 195 11.1 异常处理的基本知识 195 11.1.1 try和catch捕获异常 195 11.1.2 异常的传播过程 198 11.1.3 finally语句块的使用 199 11.1.4 try、catch及finally语句块之间...

    收获不止SQL优化

    第11章 且慢,表连接的秘密让SQL飞 302 11.1 三大经典表连接概要说明 302 11.2 各类型表连接的知识要点 303 11.2.1 从表的访问次数探索 304 11.2.2 表驱动顺序与性能 308 11.2.3 表连接是否有排序 311 11.2.4...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    2.1 多窗口类浏览器需求分析 11 2.1.1 Activity简介 11 2.1.2 Fragment简介 11 2.1.3 多窗口类浏览器需求 12 2.2 多窗口浏览器模式的实现机制 12 2.2.1安卓移动端多窗口浏览器框架 12 2.1.2多窗口浏览器模式实现机制...

Global site tag (gtag.js) - Google Analytics