正文内容
ORACLE中游标的使用
来源:漫步者
作者:开心麻花
2025-09-19
1

一般情况下, 查询得到的结果都是多行记录数据, 而在P L/S Q L程序块中S E-LECT语句只能处理查询结果为单行记录数据的情况。要想逐行操作记录数据的值, 需要使用游标。游标是用户定义的引用类型, 它能够根据查询条件从数据库中查询出一组记录, 将其作为一个临时表放置在数据缓冲区中, 以游标作指针, 逐行对记录数据进行操作。

根据Oracle游标的声明方法不同, 可以将Oracle的游标分为隐式游标和显式游标。对于数据操纵语句和单行查询语句来说, Oracle会为它们分配隐式游标。为了处理查询语句返回的多行数据, 必须使用显式游标。当查询返回结果超过一行时, 就需要一个显示游标, 此时用户不能使用SELECT INTO语句。显式游标在PL/SQL块的声明部分声明, 在执行部分或异常处理部分打开、提取数据和关闭。

1 显式游标

1.1 声明游标

在程序中使用游标, 首先必须声明游标。声明游标时, 要用关键字CURSOR, 语法如下。

CURSOR cursor_name IS select statement。

说明:cursor_name用于指定游标的名称;select statement用于指定游标所对应的查询语句。

如CURSOR c_emp IS select empno, ename, salary from emp where salary>2000。

1.2 打开游标

在操作数据之前, 首先要打开游标。打开游标时, Oracle会执行游标所对应的查询语句, 并将查询语句的结果暂存在结果集中。打开游标的语法如下。

OPEN cursor_name。

说明:cursor_name是在声明部分定义的游标名。

OPEN一个游标时, 游标的指针自动的指向活动集的第一条记录。

但是如果打开一个已经打开的游标, 会报错。

ORA-06511:PL/SQL:cursor already open。

1.3 提取数据

在打开游标之后, 从游标得到一行数据使用FETCH命令, 每次提取数据后, 游标都指向结果集的下一行。语法如下。

FETCH cursor_name INTO variable[, variable, ...]。

对于SELECT定义的游标的每一列, FET CH变量列表都应该有一个变量与之相对应, 变量的类型也要相同。

1.4 关闭游标

在提取并处理了结果集的所有数据后, 就可以关闭游标并释放结果集。语法如下。

CLOSE cursor_name。

下面通过一个例子来说明游标的使用。

【例1】游标的使用。

2 循环游标

FOR循环游标是我们常用的一种方法, 它可以简化显式游标的处理代码。在使用FOR循环游标时。ORACLE会隐含地打开游标、提取游标数据并关闭游标。语法如下:

说明:cursor_name是已定义的游标名;record_name是PL/SQL声明的记录变量。此变量的属性声明为%R O W T Y P E类型, 作用域在FOR循环之内。例2为用FOR循环重写的例1的程序。

【例2】循环游标的使用。

3 REF游标

以上所说的隐式游标和显式游标都是静态的, 当用户使用它们的时候查询语句已经确定。如果用户需要在运行的时候动态决定执行何种查询, 则可以使用REF游标和游标变量。

创建REF游标变量需要两个步骤:声明REF游标类型和声明REF游标类型的游标变量。声明REF游标的语法如下。

TYPE ref_cursor_name IS REF CUR-SOR[RETURN return_type]

说明:RETURN语句为可选子句, 用于指定游标提取结果集的返回类型。

【例3】REF游标的使用。

使用游标可以极大方便PL/SQL程序的编写, 就本质而言, 游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来, 使两个数据处理方式能够进行沟通。游标还有很多方面的用法, 还需要我们不断地去学习和研究。

摘要:Oracle游标是PL/SQL的重要组成部分, 在PL/SQL中, 当查询返回结果超过一行时, 就需要用到游标。本文通过例子详细介绍了显示游标的声明、打开、提取数据和关闭, 并且介绍了循环游标和REF游标的使用。

关键词:游标,循环游标,REF游标

相关文章
表演人才范文

表演人才范文

表演人才范文(精选11篇)表演人才 第1篇六七岁至十一二岁是学龄初期, 即相当于儿童接受小学教育的年龄。这一时期少儿的主要行为活动是学...

2
2025-09-20
保安班长月总结

保安班长月总结

保安班长月总结(精选6篇)保安班长月总结 第1篇篇一:保安班长年终总结个人总结光阴似箭日如梭,转眼间半年已经过去。回顾我们保安队在近...

1
2025-09-20
班主任有关工作培训心得

班主任有关工作培训心得

班主任有关工作培训心得(精选15篇)班主任有关工作培训心得 第1篇20**年8月我有幸在市电大参加了“仙桃市第一期小学骨干班主任高级研修班...

1
2025-09-20
部编版一年级四季教案

部编版一年级四季教案

部编版一年级四季教案(精选6篇)部编版一年级四季教案 第1篇《四季》文清路小学 刘明霞教学目标:1、认识 9个生字和言字旁,虫字旁和折...

1
2025-09-20
办公室文秘的岗位职责有哪些

办公室文秘的岗位职责有哪些

办公室文秘的岗位职责有哪些(精选18篇)办公室文秘的岗位职责有哪些 第1篇1、在董事会的领导下主持办公室的全面工作,负责办公室的日常工...

3
2025-09-20
八年级上册第1课鸦片战争

八年级上册第1课鸦片战争

八年级上册第1课鸦片战争(精选12篇)八年级上册第1课鸦片战争 第1篇《鸦片战争》教学设计【教学目标】1、英国向中国走私鸦片及危害;林则...

2
2025-09-20
表面粗糙度测量仪的工作原理

表面粗糙度测量仪的工作原理

表面粗糙度测量仪的工作原理(精选10篇)表面粗糙度测量仪的工作原理 第1篇表面粗糙度测量仪的工作原理分析及其改进方案阳旭东(贵州工业大...

1
2025-09-20
宾馆改造可行性报告

宾馆改造可行性报告

宾馆改造可行性报告(精选8篇)宾馆改造可行性报告 第1篇第一章 总论1.1 项目名称及承办单位项目名称:宝地宾馆改扩建项目 承办单位:...

1
2025-09-20
付费阅读
确认删除?
回到顶部