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

目录

[将 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 属性判断,当查询结构使用完后退出循环

相关推荐
NCIN EXPE几秒前
redis 使用
数据库·redis·缓存
MongoDB 数据平台1 分钟前
为编码代理引入 MongoDB 代理技能和插件
数据库·mongodb
lUie INGA6 分钟前
在2023idea中如何创建SpringBoot
java·spring boot·后端
极客on之路6 分钟前
mysql explain type 各个字段解释
数据库·mysql
代码雕刻家14 分钟前
MySQL与SQL Server的基本指令
数据库·mysql·sqlserver
lThE ANDE15 分钟前
开启mysql的binlog日志
数据库·mysql
小糖学代码18 分钟前
LLM系列:1.python入门:15.JSON 数据处理与操作
开发语言·python·json·aigc
yejqvow1223 分钟前
CSS如何控制placeholder文字的颜色_使用--placeholder伪元素
jvm·数据库·python
handler0126 分钟前
从源码到二进制:深度拆解 Linux 下 C 程序的编译与链接全流程
linux·c语言·开发语言·c++·笔记·学习
oLLI PILO29 分钟前
nacos2.3.0 接入pgsql或其他数据库
数据库