Oracle PL/SQL游标
游标的提出:
SQL是面向集合的,其结果一般是集合量(多条记录),而PL/SQL的变量一本是标量,其一组变量异常一直只能存放一条记录。所以仅仅使用变量并不能完全满足SQL语句向应用程序输出数据的要求。因为查询结果的记录数是不确定的,事先就不知道要声明几个变量,为此,在PL/SQL中引入了游标(cursor)的概念,用游标来协调这两种不同的处理方式。
游标的概念:
游标的使用可以让用户想操作数组一样操作查询出来的数据集,实际上,它提供了一种从集合性质的结果中提取单挑记录的手段。
游标(Cursor)形象地看出一个变动的光标。它实际上是一个指针,它在一段Oracle存放数据查询结果集的内存中,它可以指向结果集中的任意记录,初始是指向首记录。像数组的结构。
基本原理:
在PL/SQL快中执行selec,insert,update和,delete语句时,Oracle会在内存中为其分配上下文区(Context Area),即一个缓冲区。游标是指向该去的一个指针,或是命名一个工作去,或是一种结构化数据类型。它为应用程序提供了一种具有多行数据查询结果集中的每一行数据分别进行单独处理的方法。
游标分为显示游标和隐式游标两种。
- 显示游标是由用户声明和操作的一种游标;是指在使用之前有明确的游标声明和定义,这样游标定义会关联数据查询语句,通常会返回一行或多行。打开游标后,用户可以利用游标的位置对结果集进行任何操作。
- 隐式游标是Oracle为所有数据操作语句(包括只返回单行数据的查询语句)自动声明和操作的一种游标。在每个用户会话中,可以同时打开多个游标,其数量由数据库初始参数文件的open cursors参数定义。它被PL/SQL自动关联,也叫SQL游标,由Oracle管理,用户无法控制但可以得到它的属性信息。
(提示:游标在PL/SQL中作为对数据库操作的必备部分应该熟练掌握,灵活地使用游标才能深刻地领会程序控制数据库操作的内涵。)
格式:
declare
cursor cemp xxx -- 1、定义游标
begin
open cemp -- 2、打开游标
loop --3、向下移动游标,借助循环
fetch cemp into xxxx; --4、抓取游标内容
exit when xxxx; --5、循环结束条件,当游标取不到值
end loop;
close cemp; --6、关闭游标
end
例子:取出emp中的工号empno、姓名ename和工资sal。
--定义游标
cursor cemp is select empno ,enmae,sal from emp;
vename emp.ename%type;
vempno emp.empno%type;
vsal emp.sal%type;
begin
--打开游标
open cemp;
--向下移动游标,借助循环
loop
fetch cemp into vempno,vename,vsal; --此处一定要和上面的属性顺序相同
--循环结束她条件,当游标取不到值
exit when cemp%notfound;
dbms_output.put_line(vempno||' '||vename||vsal);
end loop;
--关闭游标
close cemp;
end;
执行结果:
Oracle PL/SQL游标的更多相关文章
- Oracle PL/SQL 游标
在PL/SQL块中执行SELECT.INSERT.DELETE和UPDATE语句时,ORACLE会在内存中为其分配上下文区(Context Area),即缓冲区.游标是指向该区的一个指针,或是命名一个 ...
- [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)
原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL ...
- ORACLE PL/SQL编程详解
ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...
- [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)
原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...
- ORACLE PL/SQL编程之八:把触发器说透
原文:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之八: 把触发器说透 大家一定要评论呀,感谢!光发表就花了我将近一个下午. 本篇主要内容如下: 8.1 触发器类型 ...
- [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)
原文:[推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼.百战不殆) [推荐]ORACLE PL/SQL编程之五: 异常错误处理(知已知彼.百战不殆) 继上三篇:ORACLE PL/S ...
- [推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆)
原文:[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程详解之三: PL/SQL流程控制语句(不给规则,不成方圆) ...
- 【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航
原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人 ...
- [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)
原文:[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) [推荐]ORACLE PL/SQL编程详解之一: PL/SQL 程序设计简介(千里之行,始于足下 ...
随机推荐
- p3168 [CQOI2015]任务查询系统(差分+主席树)
恕我才学浅薄,一开始想到的是树状数组+线段树,然后看了题解才第一次见到了差分这种神奇的科技 仔细想想,主席树的本质不就是前缀和嘛,加上一个差分也是可以的,没想到真是罪过罪过 对时间维护一个差分 在Si ...
- C#Winform工具箱简介
BindingSource:指定支持事务处理初始化Button:[按钮]用户单击它时引发事件 CheckBox:[复选框]允许用户选择或清除关联选项 CheckedListBox:[复选列表框]显示一 ...
- 【团队】EasyKing的实现_1
完成部分 三个功能类 英雄. 子弹. 瓦片地图. 一个设置类 地图 实现功能 瓦片地图 英雄移动 攻击 受到攻击 TODO 子弹攻击范围 地图.建筑物和英雄的碰撞箱 音效 英雄技能 建筑 双人联机 物 ...
- UVa 11624 Fire!(着火了!)
UVa 11624 - Fire!(着火了!) Time limit: 1.000 seconds Description - 题目描述 Joe works in a maze. Unfortunat ...
- Gym 101617J Treasure Map(bfs暴力)
http://codeforces.com/gym/101617/attachments 题意:给出一个图,每个顶点代表一个金矿,每个金矿有g和d两个值,g代表金矿初始的金子量,d是该金矿每天的金子量 ...
- Ubuntu下codeblocks不能自动缩进的问题
如果在codeblocks中设置了自动缩进但是没有效果的话,在终端中执行sudo apt-get install codeblocks-contrib命令.
- https申请部署
此案例用IIS8.0演示 前提条件: 1.HTTPS协议需要443端口,安全组和防火墙开放443端口. 2.需要SSL证书 开放端口就不说了,主要说下申请SSL证书. 1.https://www.ss ...
- Python 列表list 字典dict
# coding=utf-8 支持中文 # 列表 n1 = [1, 2, 3] print n1 print len(n1) n1.append(4) print n1 # 字典,包含键值 dic = ...
- [osg][osgEarth][原]基于OE自定义自由飞行漫游器(第二版)
在初级版上,进行新的漫游方式调整 头文件: #pragma once //南水之源 20180101 #include <osgGA/CameraManipulator> #include ...
- Given d and e, factorize N to attack RSA
题目如下: RSA算法的使用一般要求每个不同的用户有一个独立的模数N.有天,Bob脑洞大开,认为似乎没有必要这样做.只需要一个模数N,然后给不同的用户分发不同的e和d就好了.可惜这种做法有严重的安全漏 ...