Oracle入门(十四.11)之使用显式游标属性

一、游标和记录

此示例中的游标基于SELECT语句,该语句仅检索每个表行的两列。 如果它检索了六列或七,八,二十个呢?

DECLAREv_emp_id employees.employee_id%TYPE;v_last_name employees.last_name%TYPE;CURSOR emp_cursor ISSELECT employee_id, last_nameFROM employeesWHERE department_id = 30;
BEGINOPEN emp_cursor;LOOPFETCH emp_cursorINTO v_emp_id, v_last_name;...

该游标检索整个EMPLOYEES行。 凌乱而啰嗦,不是吗?

DECLAREv_emp_id employees.employee_id%TYPE;v_first_name employees.first_name%TYPE;v_last_name employees.last_name%TYPE;...v_department_id employees.department_id%TYPE;CURSOR emp_cursor ISSELECT * FROM employeesWHERE department_id = 30;
BEGINOPEN emp_cursor;LOOPFETCH emp_cursorINTO v_emp_id, v_first_name, v_last_name ...v_department_id;...

比较下面的代码片段。 你看到了什么差异?

DECLAREv_emp_id ...;v_first_name ...;...v_department_id ...:CURSOR emp_cursor ISSELECT * FROM employeesWHERE department_id =30;
BEGINOPEN emp_cursor;LOOPFETCH emp_cursorINTO v_emp_id, v_first_name,... v_department_id;...
DECLARECURSOR emp_cursor ISSELECT * FROM employeesWHERE department_id = 30;v_emp_recordemp_cursor%ROWTYPE;
BEGINOPEN emp_cursor;LOOPFETCH emp_cursorINTO v_emp_record;...

右侧的代码使用%ROWTYPE根据游标声明记录结构。 记录是PL / SQL中的复合数据类型。

 

二、PL / SQL记录的结构

记录是一种复合数据类型,由多个字段组成,每个字段都有自己的名称和数据类型。 您通过在字段名前加上记录名来引用每个字段。 %ROWTYPE用与它所基于的游标相同的字段声明一个记录。

(1)cursor_name%ROWTYPE的结构

DECLARECURSOR emp_cursor ISSELECT employee_id, last_name, salary FROM employeesWHERE department_id = 30;v_emp_record emp_cursor%ROWTYPE;

 

(2)游标和%ROWTYPE

%ROWTYPE便于处理活动集的行,因为您可以简单地获取记录。

 

 

DECLARECURSOR emp_cursor ISSELECT * FROM employeesWHERE department_id = 30;
v_emp_record emp_cursor%ROWTYPE;
BEGINOPEN emp_cursor;LOOPFETCH emp_cursor INTO v_emp_record;EXIT WHEN emp_cursor%NOTFOUND;DBMS_OUTPUT.PUT_LINE(v_emp_record.employee_id|| ' - '
||v_emp_record.last_name);END LOOP;CLOSE emp_cursor;
END;

(3)游标和%ROWTYPE:另一个例子

DECLARECURSOR emp_dept_cursor ISSELECT first_name, last_name, department_nameFROM employees e, departments dWHERE e.department_id = d.department_id;
v_emp_dept_record emp_dept_cursor%ROWTYPE;
BEGINOPEN emp_dept_cursor;LOOPFETCH emp_dept_cursor INTO v_emp_dept_record;EXIT WHEN emp_dept_cursor%NOTFOUND;DBMS_OUTPUT.PUT_LINE(v_emp_dept_record.first_name||' – '||v_emp_dept_record.last_name||' – '||v_emp_dept_record.department_name);END LOOP;CLOSE emp_dept_cursor;
END;

 

三、显式游标属性

与隐式游标一样,有几个属性可用于获取有关显式游标的状态信息。 当附加到游标变量名称后,这些属性返回有关游标操作语句执行的有用信息。

(1)%ISOPEN属性

只有当光标打开时才可以获取行。 在执行提取以测试游标是否处于打开状态之前,请使用%ISOPEN游标属性。 %ISOPEN返回游标状态:如果打开则为TRUE,否则返回FALSE。

例:

IF NOT emp_cursor%ISOPEN THEN
OPEN emp_cursor;
END IF;
LOOPFETCH emp_cursor...

(2)%ROWCOUNT和%NOTFOUND属性

通常在循环中使用%ROWCOUNT和%NOTFOUND属性来确定何时退出循环。
对以下内容使用%ROWCOUNT游标属性:
•处理确切的行数

•计算循环中到目前为止获取的行数和/或确定何时退出循环

对以下内容使用%NOTFOUND游标属性:
•确定查询是否找到符合条件的行
•确定何时退出循环

(3)%ROWCOUNT和%NOTFOUND的示例

此示例显示了如何在循环中使用%ROWCOUNT和%NOTFOUND属性作为退出条件。

DECLARECURSOR emp_cursor ISSELECT employee_id, last_name FROM employees;v_emp_record emp_cursor%ROWTYPE;
BEGINOPEN emp_cursor;LOOPFETCH emp_cursor INTO v_emp_record;EXIT WHEN emp_cursor%ROWCOUNT > 10 OR emp_cursor%NOTFOUND;DBMS_OUTPUT.PUT_LINE(v_emp_record.employee_id |' '|| v_emp_record.last_name);END LOOP;CLOSE emp_cursor;
END;

(4)SQL语句中的显式游标属性

您不能直接在SQL语句中使用显式游标属性。 以下代码返回一个错误:

DECLARECURSOR emp_cursor ISSELECT employee_id, salary FROM employeesORDER BY SALARY DESC;v_emp_record emp_cursor%ROWTYPE;v_count NUMBER;
BEGINOPEN emp_cursor;LOOPFETCH emp_cursor INTO v_emp_record;EXIT WHEN emp_cursor%NOTFOUND;INSERT INTO top_paid_emps(employee_id, rank, salary)VALUES(v_emp_record.employee_id, emp_cursor%ROWCOUNT,v_emp_record.salary);
... 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(转 )centos8安装mysql

【1】下载 mysql rpm包 MySQL :: Download MySQL Yum Repositoryhttps://dev.mysql.com/downloads/repo/yum/ 【2】安装mysql 根据官方文档安装,如下: MySQL :: A Quick Guide to Using the MySQL Yum Repositoryhttps://dev.mysql.com/doc/mysql-yu…

IIS负载均衡-Application Request Route详解第一篇: ARR介绍

说到负载均衡,相信大家已经不再陌生了,本系列主要介绍在IIS中可以采用的负载均衡的软件:微软的Application Request Route模块。 其实Application RequestRoute已经有很多文章介绍过了,但是有很多的文档都是英文的,笔者…

单位矩阵的逆矩阵是它本身吗_矩阵运算、单位矩阵与逆矩阵(二)

逆矩阵什么是逆矩阵?数有倒数:逆矩阵也是相同的概念,但我们写为A-1逆矩阵的定义计算逆矩阵我们怎么知道计算结果是正确的?我们把矩阵和逆矩阵相乘来看看:我们为什么需要逆矩阵,举个例子:一帮人坐…

Oracle入门(十四.12)之游标FOR循环

一、游标FOR循环游标FOR循环处理显式游标中的行。 这是一个快捷方式,因为游标被打开,循环中的每次迭代都会获取一次行,当处理最后一行时会退出循环,并且游标会自动关闭。 当最后一行被提取时,循环本身在迭代结束时自动…

结合Jexus + Kestrel 部署 asp.net core 生产环境

ASP.NET Core 是微软的全新的框架。这一框架的目标 ︰ 跨平台针对云应用优化解除 System.Web 的依赖。 获得下面三个方面的优势,你可以把它认为是一个C# 版本的NodeJS: 1) 模块化实现 2) 一切都尽可能的-异步 3) 依赖关…

centos普通用户修改文件权限_用户管理(特殊权限、特殊属性、umask 默认权限 )

特殊权限suidLinux 系统文件除了9位基本权限,还有额外3位特殊权限,分别是  SUID(set uid), -rwsr-xr-x  SGID(set gid), -rw-r-sr-x  SBIT(sticky bit), -rw-r-xr-t  这3位特殊权限不建议使用(除系统默认的特殊权限可…

Oracle入门(十四.13)之带参数的游标

一、带参数的游标参数是一个变量,其名称用于游标声明中。 当游标打开时,参数值被传递给Oracle服务器,Oracle服务器使用它来决定要将哪些行检索到光标的活动集中。这意味着您可以在块中多次打开和关闭显式光标,或者在同一个块的不同…

4.canal抽取失败报is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts‘

【README】 1.本文po出了报错【messageXXX is blocked because of many connection errors; unblock with mysqladmin flush-hosts】的解决方法; 2.解决方法参考了 StackOverflow: mysql - How to unblock with mysqladmin flush hosts - Stack Overfl…

raid配置ssd为缓存_超融合硬件选配推荐指南 | 第三期:SSD 与 HDD

本期《SMTX OS 硬件选配推荐指南》继续与大家分享单机硬件配置中存储相关的内容——固态硬盘 SSD 和机械硬盘 HDD 章节。前两期摘录了单机硬件配置中的 CPU 选择和内存选择参考,感兴趣的读者可点击回顾。如果希望获取完整《指南》,可点击这里下载。单机硬…

Oracle入门(十四.14)之处理异常

一、什么是异常? 在执行破坏程序正常运行的程序期间发现错误时会发生异常。 有很多可能的例外原因:用户在输入时出现拼写错误; 程序无法正常工作; 广告网页不存在; 等等。 你能想到在使用网站或应用程序时遇到的错误吗?二、PL / SQL中的异常…

1.(译)NoSQL与SQL数据库对比

【README】 1.本文翻译自: NoSQL Vs SQL Databases | MongoDB 2.NoSQL指的是不止sql(not only sql);NoSQL数据库是2000年代末开发的,重点是扩展,快速查询,允许频繁变更,让编程更简…

C#使用Redis集群缓存

本文介绍系统缓存组件,采用NOSQL之Redis作为系统缓存层。 一、背景 系统考虑到高并发的使用场景。对于并发提交场景,通过上一章节介绍的RabbitMQ组件解决。对于系统高并发查询,为了提供性能减少数据库压力,我们加入缓存机制&#…

Oracle入门(十四.15)之捕获Oracle服务器异常

一、异常类型 本课讨论预定义和非预定义的Oracle服务器异常。(1)使用PL / SQL处理异常有两种提出异常的方法: •Oracle服务器隐式(自动):- 发生Oracle错误并自动引发相关异常。- 例如,如果在SEL…

萤石云好友分享的监控怎么看_萤石S1:英超赛场上雄起的中国品牌

北京时间4月26日20:30,英超2014/15赛季第34轮,曼联客场0比3不敌埃弗顿,麦卡锡、斯通斯和米拉拉斯先后进球。曼联在连败的情况下积分榜跌至第四。后弗格森时代的曼联最近刚刚有点起色,似乎这场惨败又让曼联球迷的信心跌到了低谷。在…

2.es与mongodb的区别

【1】es vs mongo 图片转自: MongoDB和Elasticsearch的对比 参考文档: MongoDB和Elasticsearch的对比 10亿数据,数据库选Mongo还是Elalsticsearch?-51CTO.COM ElasticSearch可以替代Mongo么? - 知乎 https://www.j…

taro 缺点_Taro小程序富文本解析4种方法

最近遇到一个富文本解析的问题,尝试了很多办法,终于成功了!最后本人选择Parser。1.Taro组件rich-text优点:使用极其方便,引用一下就行了。缺点:不支持视频,放弃!2.wxParse https://g…

IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm

自从本系列发布之后,收到了很多的朋友的回复!非常感谢,同时很多朋友问到了一些问题,有些问题是一些比较基本的问题,由于时间的缘故,不会一一的为大家回复,如果有不明白的,希望大家勤…

Oracle入门(十四.16)之捕获用户定义的异常

一、异常类型 本文讨论用户定义的错误。二、捕获用户定义的异常 PL / SQL允许你定义你自己的异常。 您根据应用程序的要求定义异常。输入数据期间需要用户定义的异常的一个示例。 假设您的程序提示用户输入部门编号和名称,以便它可以更新部门的名称。 当用户进入无效…

以太坊地址和公钥_以太坊交易签名解析源码解读

上篇文章《以太坊交易签名过程源码解析[1]》从源码角度分析了一个合约调用的的签名过程,签名后的交易发送到以太坊节点后,节点需要从签名交易中还原出公钥(从公钥中单向计算出账号地址),进而将交易放入交易池中。本文从go-ethereum源码的出发…

IIS负载均衡-Application Request Route详解第三篇:使用ARR进行Http请求的负载均衡

在前两篇文章中,我们已经讲述如何配置与安装ARR,从本篇文章开始,我们将重点的来讲述如何在使用ARR进行负载均衡。 本篇文章的目的主要是一步步的带领大家如何配置和使用ARR来进行Http请求的负载均衡,从而实现高可用与高扩展性。同…