隐式/动态游标的创建与使用

目录

[将 emp 数据表中部门 10 的员工工资增加 100 元,然后使用隐式游标的 %ROWCOUNT 属性输出涉及的员工数量](#将 emp 数据表中部门 10 的员工工资增加 100 元,然后使用隐式游标的 %ROWCOUNT 属性输出涉及的员工数量)

动态游标的定义

声明游标变量

打开游标变量

检索游标变量

关闭游标变量

[定义动态游标,输出 emp 中部门 10 的所有员工的工号和姓名](#定义动态游标,输出 emp 中部门 10 的所有员工的工号和姓名)


Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645

和显式游标不同,隐式游标是系统自动创建的

用于处理 DML 语句(例如 INSERT、UPDATE、DELETE 等指令)的执行结果或者 SELECT 查询返回的单行数据,

这时隐式游标是指向缓冲区的指针。

使用时不需要进行声明、打开和关闭,因此不需要诸如 OPEN、FETCH、CLOSE 这样的操作指令。

隐式游标也有前述介绍的 4 种属性,使用时需要在属性前面加上隐式游标的默认名称 SQL,因此隐式游标也叫 SQL 游标

将 emp 数据表中部门 10 的员工工资增加 100 元,然后使用隐式游标的 %ROWCOUNT 属性输出涉及的员工数量

分析:范例要实现的功能可以通过 UPDATE 语句实现,然后使用 %ROWCOUNT 给出所涉及的员工数量。

具体程序代码及运行结果如下图所示

显式游标在定义时与特定的查询绑定,其结构是不变的,反映的是在显式游标打开的时刻当时的状态,

此后如果再对数据库进行更新、删除或者插入,不会影响已经打开的游标。

而动态游标也称为游标变量,是一个指向多行查询结果集的指针,不与特定的查询绑定,可以在打开游标变量时定义查询,

如果打开,用户所做的修改、更新或者删除在动态游标中都会有反应

动态游标的定义

sql 复制代码
TYPE 动态游标名称 IS REF CURSOR [RETURN 返回类型 ]

其中,返回类型是可选项

声明游标变量

sql 复制代码
变量名字 动态游标名称

使用前面定义的动态游标名称声明游标变量。

例如,下面两条语句分别定义了一个动态游标 emp_cursor,其返回类型是 emp 数据表的行记录类型,

然后使用所定义的动态游标声明了一个游标变量

sql 复制代码
TYPE emp_cursor IS REF CURSOR RETURN emp%ROWTYPE;
Var_cursor emp_cursor;

打开游标变量

和前面显式游标一样,使用之前要打开的游标,不过由于在动态游标定义的时候并没有对应的查询语句,

因此在打开游标变量的时候要同时指定游标变量所对应的查询语句,当执行打开游标操作时,

系统会执行对应的查询语句,将查询结果放入游标变量对应的缓冲区中。其对应语法如下所示

sql 复制代码
OPEN 游标变量 FOR < SELECT 语句 >

例如,游标变量对应查询语句如下所示

sql 复制代码
OPEN var_cursor FOR SELECT * FROM emp;

检索游标变量

和前面介绍的显式游标检索的方法一样,都是使用 FETCH...INTO...语句存储当前游标指向的记录值,并结合简单循环结构显示查询结果中的记录

关闭游标变量

游标变量使用完,应及时关闭以释放缓冲区空间

sql 复制代码
CLOSE 游标变量

定义动态游标,输出 emp 中部门 10 的所有员工的工号和姓名

分析:可以按照上面介绍的动态游标定义的方法,逐步实现要求的功能。

如上图所示,在声明部分定义了游标变量 var_cursor,在程序主体部分打开游标变量的时候与查询语句建立关联,

使用 FETCH...INTO...语句和 LOOP 循环结构显示符合条件的每一条记录,在循环结构中,使用 %NOTFOUND 属性判断,当查询结构使用完后退出循环

相关推荐
nnsix几秒前
MVC、MVP、MVVM 架构 笔记
java·开发语言·前端
Irene1991几秒前
Oracle(字符集分为服务端和客户端) 和 Hive(依赖 MySQL(或 PostgreSQL)存储元数据)字符集编码格式查询,中文乱码处理
hive·sql·oracle
网管NO.11 分钟前
SQL 企业实战全流程|全覆盖前置基础 + 核心语法(MySQL8.0 可直接运行)
数据库·oracle
野生技术架构师2 分钟前
2026最新Java面试1200题全解析:从基础到架构,覆盖所有技术栈(含答案)
java·面试·架构
头歌实践平台3 分钟前
HBase 完全分布式安装(新)
数据库·分布式·hbase
大尚来也3 分钟前
主键、外键、索引,一篇讲透
java·数据库·oracle
韶博雅5 分钟前
oracle优化用到的sql
sql·oracle·ffmpeg
Smile_2542204186 分钟前
vue3 + ts reactive方式清空表单对象
开发语言·前端·javascript
j7~7 分钟前
【MYSQL】表的内外连接--详解(重点)
数据库·mysql·内连接·左外连接·右外连接
段ヤシ.9 分钟前
回顾Java知识点,面试题汇总Day17(持续更新)
java·springboot·spring security·shiro·mybatis-plus·jdbctemplate·spring data jpa