08-Oracle游标管理(定义,打开、获取数据及关闭游标)
目标
游标
•示例:显示当用户没有创建一个显示游标以获得多行结果时发生的情况。
DECLAREv_title books.title%TYPE;v_retail books.retail%TYPE;
BEGINSELECT title,retailINTO v_title,v_retailFROM books NATURAL JOIN orderitemsWHERE order#=1012;DBMS_OUTPUT.PUT_LINE('Books title: '||v_title||' Retail price: '||v_retail);
END;
声明显示游标
CURSOR cursor_name IS selectquery;
•前面示例中,需要一个显示游标来检索订单1012中的图书的书名和零售价。
DECLARECURSOR books_cursor ISSELECT title,retailFROM books NATURAL JOIN orderitemsWHERE order#=1012;
打开显示游标
OPEN cursor_name;示例:
OPEN books_cursor;打开游标之后,可以将游标中包含的数据赋给变量以进行处理
关闭显示游标
CLOSE cursor_nameCLOSE books_cursor;
从显示游标中提取数据
FETCH cursor_name INTO variablename[,…variablename];FETCH books_cursor INTO v_title,v_retail;
示例:显示游标的使用
DECLAREv_title books.title%TYPE;v_retail books.retail%TYPE;CURSOR books_cursor ISSELECT title,retailFROM books NATURAL JOIN orderitemsWHERE order#=1012;
BEGINOPEN books_cursor;FETCH books_cursor INTO v_title,v_retail;DBMS_OUTPUT.PUT_LINE('Books title: '||v_title||' Retail price: '||v_retail);CLOSE books_cursor;
END;
结果
结果中发现只有一行数据输出
独立执行这个PL/SQL块的SELECT语句,显示
游标属性 | 说明 |
%ROWCOUNT | 指出处理的行 |
%FOUND | 如果处理了一行或多行,这包含值TRUE——如果没有处理行,则为FALSE |
%NOTFOUND | 如果没有处理行,则包含值TRUE——如果处理了一行或多行,则为FALSE |
%ISOPEN | 如果在处理之后不关闭数据,这包含值TRUE——如果关闭游标,则为FALSE。在发生隐式游标时,由于它是自动关闭的,因此这个值在处理之后总是FALSE |
DECLAREv_title books.title%TYPE;v_retail books.retail%TYPE;CURSOR books_cursor ISSELECT title,retailFROM books NATURAL JOIN orderitemsWHERE order#=1012;
BEGINOPEN books_cursor;LOOPFETCH books_cursor INTO v_title,v_retail;EXIT WHEN books_cursor%NOTFOUND;DBMS_OUTPUT.PUT_LINE('Books title: '||v_title||' Retail price: '||v_retail);END LOOP;CLOSE books_cursor;
END;

游标FOR循环
FOR record_name IN cursor_name LOOPstatements;[statement;…]
END LOOP;
说明:不是检索游标中的行并向变量赋值,而是将行的内容赋给一个记录。“记录”是一种复合数据类型,可以使其结构与检索的行的结构相同。要想指定记录的结构与检索的行的结构相同,可以在定义记录时使用%ROWTYPE属性。与%TYPE属性相似, %TYPE用来定义基于一个单独列的变量,而%ROWTYPE属性定义了基于数据库表中包含的所有列的记录。
示例:包含游标FOR循环的PL/SQL块
DECLARECURSOR books_cursor ISSELECT title,retailFROM books NATURAL JOIN orderitemsWHERE order#=1012;r_books books%ROWTYPE;
BEGINFOR r_books IN books_cursor LOOPDBMS_OUTPUT.PUT_LINE('Books title: '||r_books.title||' Retail price: '||r_books.retail);END LOOP;
END;
•示例说明:在块的声明部分定义了记录 r_books,它具有books表的结构。可执行部分包含一个游标FOR循环,它隐含打开books_cursor的游标,并将其内容赋给r_books记录对名为books_cursor的游标中包含的每一行都执行一次这个游标FOR循环。这个循环中包含的唯一一个语句将显示当前正在处理的行。注意:在DBMS_OUTPUT程序包显示的字符引用了记录中包含的列名称。因为将数据赋值给一个记录而不是单独的变量,所以显示值的唯一方法就是指定包含所需数据的列名称。在使用%ROWTYPE属性定义这个记录时,还为从books表中检索的各个值指定了列名称。要想指定应该显示哪一列或哪些列,必须在列名称之前添加包含数据的记录的名称,如r_books.title在处理了books_cursor中包含的最后一行之后,这个循环将会终止,将隐含关闭游标。
BEGINFOR r_books IN (SELECT title,retailFROM books NATURAL JOIN orderitemsWHERE order#=1012) LOOPDBMS_OUTPUT.PUT_LINE('Books title: '||r_books.title||' Retail price: '||r_books.retail);END LOOP;
END;
•修改示例,实现确定订单1012中购买的图书以及总应付款额。
DECLAREv_ordertotal NUMBER(5,2):=0;
BEGINFOR r_books IN (SELECT title,retail,quantityFROM books NATURAL JOIN orderitemsWHERE order#=1012) LOOPDBMS_OUTPUT.PUT_LINE('Books title: '||r_books.title||' Retail price: '||r_books.retail);v_ordertotal :=v_ordertotal + r_books.retail*r_books.quantity;END LOOP;DBMS_OUTPUT.PUT_LINE('Total Amount Due: '||v_ordertotal);
END;
带有逻辑运算符的游标循环控制
DECLAREv_title books.title%TYPE;v_retail books.retail%TYPE;v_number NUMBER(2):=&How_Many_Books_To_Display;CURSOR books_cursor ISSELECT title,retailFROM booksORDER BY retail DESC;
BEGINOPEN books_cursor;FETCH books_cursor INTO v_title,v_retail;WHILE books_cursor%ROWCOUNT<=v_number ANDbooks_cursor%FOUND LOOPDBMS_OUTPUT.PUT_LINE(v_title||','||v_retail);FETCH books_cursor INTO v_title,v_retail;END LOOP;CLOSE books_cursor;
END;
AND | TRUE | FALSE | NULL | OR | TRUE | FALSE | NULL |
TRUE | TRUE | FALSE | NULL | TRUE | TRUE | TRUE | TRUE |
FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | NULL |
NULL | NULL | FALSE | NULL | NULL | TRUE | NULL | NULL |
游标的使用——处理隐式游标
格式调用为: SQL%
注: INSERT, UPDATE, DELETE, SELECT 语句中不必明确定义游标。
隐式游标属性SQL %FOUND 布尔型属性 , 当最近一次读记录时成功返回,则值为 true ;SQL %NOTFOUND 布尔型属性 , 与 %found 相反;SQL %ROWCOUNT 数字型属性 , 返回已从游标中读取得记录数;SQL %ISOPEN 布尔型属性 , 取值总是 FALSE 。 SQL 命令执行完毕立即关闭隐式游标。
例:删除图书库存中某出版社出版的图书,如果不再存在该出版社的图书,则在出版设信息中删除该出版社信息.
DECLARE
v_pubid books.pubid%TYPE :=&in_pubid;
BEGINDELETE FROM books WHERE pubid=v_pubid;DBMS_OUTPUT.PUT_LINE('删除出版社编号为'||v_pubid||'的图书记录');COMMIT;IF SQL%NOTFOUND THENDELETE FROM publisher WHERE pubid=v_pubid;END IF;COMMIT;
END;
练习
总结
本人从事软件项目开发20多年,2005年开始从事Java工程师系列课程的教学工作,录制50多门精品视频课程,包含java基础,jspweb开发,SSH,SSM,SpringBoot,SpringCloud,人工智能,在线支付等众多商业项目,每门课程都包含有项目实战,上课PPT,及完整的源代码下载,有兴趣的朋友可以看看我的在线课堂
讲师课堂链接:https://edu.csdn.net/lecturer/893
相关文章:

08-Oracle游标管理(定义,打开、获取数据及关闭游标)
目标 1.确定何时需要显示游标2.声明、打开和关闭显示游标3.从显示游标中提取数据4.了解与游标有关的属性5.使用游标FOR循环检索游标中的数据6.在游标FOR循环的子查询中声明游标7.评估使用逻辑运算符结合在一起的布尔条件游标 1、在使用一个PL/SQL块来执行DML语句或只返回一行结…...
Python判断字符串是否包含特定子串的7种方法
目录1、使用 in 和 not in2、使用 find 方法3、使用 index 方法4、使用 count 方法5、通过魔法方法6、借助 operator7、使用正则匹配转自:https://cloud.tencent.com/developer/article/1699719我们经常会遇这样一个需求:判断字符串中是否包含某个关键词…...

aop实现接口访问频率限制
引言 项目开发中我们有时会用到一些第三方付费的接口,这些接口的每次调用都会产生一些费用,有时会有别有用心之人恶意调用我们的接口,造成经济损失;或者有时需要对一些执行时间比较长的的接口进行频率限制,这里我就简…...

Hive---窗口函数
Hive窗口函数 其他函数: Hive—Hive函数 文章目录Hive窗口函数开窗数据准备建表导入数据聚合函数window子句LAG(col,n,default_val) 往前第 n 行数据LEAD(col,n, default_val) 往后第 n 行数据ROW_NUMBER() 会根据顺序计算RANK() 排序相同时会重复,总数不会变DENSE…...
JavaSe第7次笔记
1. C语言里面,NULL是0地址。Java中null和0地址没关系。 2.数组可以做方法的返回值。 3.可以使用变量作为数组的个数开辟空间。 4.断言assert,需要设置。 5.排序:Arrays. sort(array); 6.查找: int index Arrays. binarySea…...
什么是 Service 以及描述下它的生命周期。Service 有哪些启动方法,有 什么区别,怎样停用 Service?
在 Service 的生命周期中,被回调的方法比 Activity 少一些,只有 onCreate, onStart, onDestroy, onBind 和 onUnbind。 通常有两种方式启动一个 Service,他们对 Service 生命周期的影响是不一样的。 1. 通过 startService Service 会经历 onCreate 到 onStart,然后处于运行…...
Redis部署
JAVA安装 mkdir /usr/local/javacd /usr/local/java/wget --no-check-certificate --no-cookies --header "Cookie: oraclelicenseaccept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u13…...

AT32F437制作Bootloader然后实现Http OTA升级
首先创建一个AT32F437的工程,然后发现调试工程配置这里的型号和创建工程选的型号不一致,手动更改一下,使用PW Link下载程序的话还要配置一下pyocd.exe的路径。 打开drv_clk.c文件的调试功能看下系统时钟频率。 项目使用的是AT32F437VMT7芯片&…...
Springboot项目启动初始化数据缓存
1.从Java EE5规范开始,Servlet中增加了两个影响Servlet生命周期的注解, PostConstruct和PreDestroy,这两个注解被用来修饰一个非静态的void()方法,被PostConstruct修饰的方法会在服务器加载Servlet的时候运…...

深度学习必备知识——模型数据集Yolo与Voc格式文件相互转化
在深度学习中,第一步要做的往往就是处理数据集,尤其是学习百度飞桨PaddlePaddle的小伙伴,数据集经常要用Voc格式的,比如性能突出的ppyolo等模型。所以学会数据集转化的本领是十分必要的。这篇博客就带你一起进行Yolo与Voc格式的相互转化&…...

数据、数据资源及数据资产管理的区别
整理不易,转发请注明出处,请勿直接剽窃! 点赞、关注、不迷路! 摘要:数据、数据资源、数据资产 数据、数据资源及数据资产的区别 举例 CRM系统建设完成后会有很多数据,这些数据就是原始数据,业务…...

标度不变性(scale invariance)与无标度(scale-free)概念辨析
文章目录标度标度种类名义标度序级标度等距标度比率标度常用标度方法不足标度不变性标度不变(Scale-invariant)曲线和自相似性(self-similarity)射影几何分形随机过程中的标度不变性标度不变的 Tweedie distribution普适性&#x…...

WMS仓库管理系统解决方案,实现仓库管理一体化
仓库是企业的核心环节,若没有对库存的合理控制和送货,将会造成成本的上升,服务品质的难以得到保证,进而降低企业的竞争能力。WMS仓库管理系统包括基本信息,标签,入库,上架,领料&…...
css常见定位、居中方案_css定位居中
一、 定位分类 1、静态定位 position:static;(默认,具备标准流条件) 2、相对定位 position:relative; 通过 top 或者 bottom 来设置 Y 轴位置 通过 left 或者 right 来设置 X 轴位置 特点: 相对定位不会脱离文档流相对于自…...

【微信小程序】-- 自定义组件 -- 创建与引用 样式(三十二)
💌 所属专栏:【微信小程序开发教程】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…...

ArangoDB——AQL编辑器
AQL 编辑器 ArangoDB 的查询语言称为 AQL。AQL与关系数据库管理系统 (RDBMS)区别在于其更像一种编程语言,更自然地适合无模式模型,并使查询语言非常强大,同时保持易于读写。数据建模概念 数据库是集合的集合。集合存储记录,称为文…...

Lesson 9.1 集成学习的三大关键领域、Bagging 方法的基本思想和 RandomForestRegressor 的实现
文章目录一、 集成学习的三大关键领域二、Bagging 方法的基本思想三、RandomForestRegressor 的实现在开始学习之前,先导入我们需要的库,并查看库的版本。 import numpy as np import pandas as pd import sklearn import matplotlib as mlp import sea…...

basic1.0链码部署(基于test-network 环境ubuntu20.04腾讯云)
解决了官方示例指令需要科学上网才能运行的问题(通过手动下载二进制文件和拉取官方fabric-samples)。具体的将bootstrap.sh脚本解读了一遍 具体可以参照我的博客 fabric中bootstrap.sh到底帮助我们干了什么?(curl -sSL https://bi…...

Android---系统启动流程
目录 Android 系统启动流程 init 进程分析 init.rc 解析 Zygote 概叙 Zygote 触发过程 Zygote 启动过程 什么时Runtime? System Server 启动流程 Fork 函数 总结 面试题 Android 是 google 公司开发的一款基于 Linux 的开源操作系统。 Android 系统启动…...

【网络】http协议
🥁作者: 华丞臧. 📕专栏:【网络】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。 推荐一款刷题网站 👉 LeetCode刷题网站 文章…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...