oracle数据库中的游标
oracle中的游标,游标的概念与作用,游标的分类,游标的使用。
一,游标的概念与作用
摘自百度百科:游标(Cursor)是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次一行或者多行前进或向后浏览数据的能力。可以把游标当作一个指针,它可以指定结果中的任何位置,然后允许用户对指定位置的数据进行处理。游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标可以被看作是一个查询结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成的一个临时文件,提供了在查询结果集中向前或向后浏览数据、处理结果集中数据的能力。有了游标,用户就可以访问结果集中任意一行数据,在将游标放置到某行之后,可以在该行或从该位置的行块上执行操作。
其实就是用于存放查询出来的多条记录的一个临时变量,我们可以从这个变量中取出我们需要的信息字段。
二,游标的分类
游标有两种类型:显式游标和隐式游标。
一般我们用到的SELECT...INTO...查询语句,一次只能从数据库中提取一行数据,对于这种形式的查询和DML操作,系统都会使用一个隐式游标。但是如果要提取多行数据,就需要由程序员定义一个显式游标,并通过与游标有关的语句进行处理。显式游标对应一个返回结果为多行多列的SELECT语句。 游标一旦打开,数据就从数据库中传送到游标变量中,然后应用程序再从游标变量中分解出需要的数据,并进行处理。
简单的DML操纵语句和单行查询语句会使用隐式游标,这些语句分别是插入insert语句,更新update语句,删除delete语句,单行select查询语句。
当系统使用一个隐式游标时,可以通过隐式游标的属性来了解操作的状态和结果,进而控制程序的流程。隐式游标可以使用名字SQL来访问,但要注意,通过SQL游标名总是只能访问前一个DML操作或单行SELECT操作的游标属性。所以通常在刚刚执行完操作之后,立即使用SQL游标名来访问属性。
游标的属性有以下四种
1.SQL%ROWCOUNT 返回值为一个整型数字 代表DML语句成功执行的数据行数
2.SQL%FOUND 布尔型 值为TRUE代表插入、删除、更新或单行查询操作成功
3.SQL%NOTFOUND 布尔型 值为true表示插入、删除、更新或单行查询操作失败。
4.SQL%ISOPEN 布尔型 DML执行过程中为真,结束后为假
三,游标的使用
隐式游标的使用主要就是以上的四种属性的使用,使用它们来进行一些流程控制。
显示游标的声明和使用
cursor cursor_name[ 参数1 参数类型,参数2,参数类型...] is select 语句;
游标的使用步骤:
1.声明一个游标
2.打开游标 open 游标名(参数1,参数2..);
3.使用循环遍历游标,从游标中取值。fetch 游标名 into 变量名,循环的退出条件是 游标名%notfound;
4.关闭游标 close 游标名;
游标的遍历(两种方式)
1.使用loop循环遍历
例如 :
declare
cursor outemp is select * from emp;
ouem emp%rowtype;//也可以是%type,但是必须和表中的类型一致。
begin
open outemp;
loop
fetch outemp into ouem;
exit when outemp%notfound;//退出条件
dbms_output.put_line(ouem.ename || ' ' ||ouem.sal);
end loop;
close outemp;
end;
2.使用for循环遍历游标
例如:
declare
cursor outfor is select * from emp;
begin
for vrow in outfor loop
dbms_output.put_line(vrow.ename || ' ' || vrow.sal);
end loop;
end;
使用for循环遍历游标的好处:1.不用声明额外的变量,2.不用打开和关闭游标,3.写法简单。
系统引用游标
1. 声明游标 : 游标名 sys_refcursor
2. 打开游标: open 游标名 for select语句;
3. 从游标中取数据
4. 关闭游标
例如:--输出员工表中所有的员工姓名和工资
declare
vrows sys_refcursor;
vrow emp%rowtype;
begin
open vrows for select * from emp;
loop
fetch vrows into vrow;
exit when vrows%notfound;
dbms_output.put_line('姓名:'||vrow.ename ||' 工资: ' || vrow.sal);
end loop;
close vrows;
end;
以上就是游标的基础,使用游标时一定要记得关闭游标,还有就是在定义变量时需要注意定义的类型必须要和表中的字段类型一致,否则会出错。
详情参见:https://blog.csdn.net/liyong199012/article/details/8948952
oracle数据库中的游标的更多相关文章
- Oracle数据库中的数据出错的解决办法
http://www.jcwcn.com/article/database/oracle/ 今天上班犯了一个严重的错误:把我们系统所使用的Oracle数据库中的数据给改掉了!当发现自己改错时,顿时冒了 ...
- ORACLE数据库中执行计划出现INTERNAL_FUNCTION一定是隐式转换吗?
ORACLE数据库中,我们会使用一些SQL语句找出存在隐式转换的问题SQL,其中网上流传的一个SQL语句如下,查询V$SQL_PLAN的字段FILTER_PREDICATES中是否存在INTERNAL ...
- 将Oracle数据库中的数据写入Excel
将Oracle数据库中的数据写入Excel 1.准备工作 Oracle数据库"TBYZB_FIELD_PRESSURE"表中数据如图: Excel模板(201512.xls): 2 ...
- --关于null在oracle数据库中是否参与计算,进行验证,
--关于null在oracle数据库中是否参与计算,进行验证,with td as (select null id,1 name from dual ),td1 as ( select null id ...
- Oracle数据库中SYS、SYSTEM、DBSNMP、SYSMAN四用户的区别
[转] SYS.SYSTEM.DBSNMP. Oracle 数据库中 SYS.SYSTEM.DBSNMP.SYSMAN 四用户的区别 用户: SYS 用户: SYS,默认密码为 CHANGE_ON ...
- Oracle数据库中调用Java类开发存储过程、函数的方法
Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日 浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL, ...
- 【转】Oracle数据库中Sequence的用法
在Oracle数据库中,sequence等同于序列号,每次取的时候sequence会自动增加,一般会作用于需要按序列号排序的地方. 1.Create Sequence (注释:你需要有CREATE S ...
- oracle数据库中提供的5种约束
约束作用:用来保持数据的完整性,防止无效数据进入到数据库中.oracle数据库中提供的5种约束,都是限定某个列或者列的组合的.1.主键约束(PRIMARY KEY):在一个表中能唯一的标识一行.主键可 ...
- Oracle数据库中实现mysql数据库中auto-increment功能
在Mysql数据库中,想要实现一条数据的自增一功能(即插入此数据时填写null即可,系统自动+1),可直接在所在列使用语句auto-increment. id int primary key auto ...
随机推荐
- mac 绑定阿里企业邮箱
注意事项: 1. 收件服务器 千万得写对, 选 pop 就写 pop.mxhichina.com; 选 imap 就写 imap.mxhichina.com 2. 发件服务器 必须写,smtp.mxc ...
- VMware NAT 静态IP模式下上网
自从开始学Linux之后,对使用NAT模式上网,很是困惑.具体原理,还待求证. 使用方法(VMware): 简介: wmware在NAT使用方面很是轻松 打开本地的网络适配器. 修改虚拟网卡VMnet ...
- Linux安装部署FTP服务器
Linux安装部署FTP服务器 本文章会将安装FTP服务器的步骤以及一些遇到的问题来记录下 因为项目中要与第三方对接数据,需要用到FTP服务器以提供他们每天上传数据,因为之前在本地的VMware虚 ...
- 使用 UIStoryBoard 语法糖
最后更新: 2018-09-06 当你用 UIStoryBoard (以下简称 'SB') 做iOS开发时候,总是避免不了设置 StoryBoard ID 的问题, StoryBoard ID 是一个 ...
- 根据linux自带的JDK,配置JAVA_HOME目录
在配置hadoop是,进行格式化hadoop的时候,出现找不到jdk 我用centos6.5是64位的, 发现本机有java ,就找了一下其位置 找到了jdk-1.7.0_75 which java ...
- pycharm selenium 安装firefox驱动和Google驱动教程
一.下载Firefox浏览器或Google浏览器 下载渠道有很多,直接下载最新版的就可以了. 二.下载驱动 Firefox驱动 地址:https://github.com/mozilla/geckod ...
- 理解BFC以及BFC相关布局问题解决
写页面时会遇到: 子元素float父元素的高度不会撑开; 在布局时,box1and box2,其中box1 float:left,这是box2会在box1下面,(如果文字过多就会形成文字环绕效果),但 ...
- hibernate一对一单项关联映射
一.主键关联 1.两个实体对象的主键一样,以表明它们之间的一一对应关系: 2.不需要多余的外键字段来维护关系,仅通过主键来关联,即Person的主键要依赖IdCard的主键,他们共用一个主键值. Pe ...
- 分布式工作流任务调度系统Easy Scheduler正式开源
分布式工作流任务调度系统Easy Scheduler正式开源 1.背景 在多位技术小伙伴的努力下,经过近2年的研发迭代.内部业务剥离及重构,也经历一批种子用户试用一段时间后,EasyScheduler ...
- always_populate_raw_post_data
Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a futu ...