Oracle 基础 游标
一:游标的基本原理
游标用来处理从数据库中检索的多行记录(使用SELECT语句)。利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集。
为了处理SQL语句,Oracle将在内存中分配一个区域,这就是上下文区。这个区包含了已经处理完的行数、指向被分析语句的指针,整个区是查询语句返回的数据行集。游标就是指向上下文区句柄或指针。
二:游标的分类
1.静态游标:在编译时知道其SELECT语句的游标。
(1).显示游标
(2).隐式游标
2.动态游标:用户为游标使用的查询直到运行的时候才能确定,必须声明游标变量。
(1):强类型REF游标
(2):弱类型REF游标。
三:显示游标的用法
显示游标被用于处理返回多行数据的SELECT 语句,游标名通过CURSOR….IS 语句显示地赋给SELECT 语句。
(一):使用步骤
1)声明游标:
CURSOR cursor_name(游标名) IS select 语句;
2)为查询打开游标:
OPEN cursor_name(游标名)
3)取得结果放入PL/SQL变量中;
FETCH cursor_name(游标名) INTO list_of_variables(变量);
FETCH cursor_name(游标名) INTO PL/SQL_record(变量列表);
4)关闭游标。
CLOSE cursor_name游标名
注意:在声明游标时,select_statement不能包含INTO子句。当使用显示游标时,INTO子句是FETCH语句的一部分。
例:显示雇员的名称和薪水
方法一:

--使用LOOP遍历游标
DECLARE
v_name emp.ename%TYPE;
v_sal emp.sal%TYPE;
CURSOR cus_emp IS
SELECT ename,sal FROM emp; --声明游标
BEGIN
OPEN cus_emp; --打开游标
LOOP
FETCH cus_emp INTO v_name,v_sal; --提取游标
EXIT WHEN cus_emp%NOTFOUND;
dbms_output.put_line('第'||cus_emp%ROWCOUNT||'个用户: name:'||v_name||' sal:'||v_sal);
END LOOP;
CLOSE cus_emp; --关闭游标
END;

显示游标的属性
%isopen:游标是否打开
%found:游标是否指向有效行
%notfounp:游标是否没有指向有效行
%rowcount:游标抽取的行数
语法:游标名 属性名
方法二:使用游标简化游标的读取
For 自定义类型 in 游标名 loop;
--操作各行的数据
end loop;
| DECLARE CURSOR cus_emp IS SELECT ename,sal FROM emp; BEGIN FOR record_emp IN cus_emp LOOP dbms_output.put_line('第'||cus_emp%ROWCOUNT||'个用户: name:'||record_emp.ename||' sal:'||record_emp.sal); END LOOP; END; |
四、隐式游标:
所有的隐式游标都被假设为只返回一条记录。
使用隐式游标时,用户无需进行声明、打开及关闭。PL/SQL隐含地打开、处理,然后关掉游标。多条sql语句 隐式游标SQL永远指的是最后一条sql语句的结果,主要使用在update 和 delete语句上。
隐式游标的四个属性:
| 属性 | 说明 |
| SQL%rowcount | 影响的记录的行数整数(用来判断插入,更新修改是否成功,必须在comit之前,否则提交后结果为0.) |
| SQL%found | 影响到了记录 true() |
| SQL%notfound | 没有影响到记录 true |
| SQL%isopen | 是否打开 布尔值 永远是false |
例如:

DECLARE
row_emp emp%ROWTYPE;
BEGIN
SELECT ename,sal INTO row_emp.ename,row_emp.sal
FROM emp WHERE emp.empno = 7369;
--判断是否查到数据
if(SQL%ROWCOUNT=1) THEN
dbms_output.put_line('找到了');
END IF;
--另一种方式判断
IF(SQL%Found) THEN
dbms_output.put_line('找到了');
END IF; dbms_output.put_line('ename:'||row_emp.ename||' sal:'||row_emp.sal);
END;

五:动态游标
Oracle 基础 游标的更多相关文章
- Oracle基础 游标
一.游标 游标用来处理从数据库中检索的多行记录(使用SELECT语句).利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集. 为了处理SQL语句,Oracle将在内存中分配一个区域,这就是上下 ...
- oracle基础教程(8)oracle修改字符集
oracle基础教程(8)oracle修改字符集 1.用dba连接数据库 -->sqlplus / as sysdba 2.查看字符集 -->SELECT parameter, value ...
- 设置ORACLE数据库游标大小
先用超级管理员(sys)登陆服务器: sqlplus "sys/***@orcl as sysdba" 连接到:Oracle 查看ORACLE最大游标数: SQL> show ...
- Oracle使用游标为所有用户表添加主键语句
应用场合:数据表新增自增一主键能加快数据表的访问速度,而且是整形的索引速度最快.本程序适合在导入Oracle数据库时删除不存在主键的情况下运行. 代码说明:所有的表主键字段名都设置为ID,如果已存在I ...
- Oracle使用游标查询指定数据表的所有字段名称组合而成的字符串
应用场合:参考网上查询数据表的所有字段名代码,使用游标生成指定单个表的所有字段名跟逗号组成的用于select 逗号隔开的字段名列表 from字符串等场合. 查询结果输出如下: 当前数据表TB_UD_ ...
- Oracle使用游标删除所有用户数据表中的所有记录脚本
应用场景:因为数据库中的数据涉及机密信息,希望一次性能删除掉所有数据,只保留数据表结构,供新项目开发程序用 测试结果:经查询已删除所有数据 存在问题:数据表如果存在外键的话下面脚本可能执行不成功,请自 ...
- 图说Oracle基础知识(一)
本文主要对Oralce数据库操作的基础知识进行一下梳理,以便进行归纳总结.适用于未使用过Oracle数据库的读者,或需要学习Oracle数据库方面的基础知识.如有不足之处,还请指正. 关于SQL介绍的 ...
- (2.14)Mysql之SQL基础——游标
(2.14)Mysql之SQL基础——游标 关键词:Mysql游标 -- (1)定义游标 declare cur_name cursor for select * from table_name wh ...
- oracle基础教程oracle客户端详解
oracle基础教程oracle客户端工具详解 参考网址:http://www.oraclejsq.com/article/010100114.html 该教程介绍了oracle自带客户端sqlplu ...
随机推荐
- poj - 3683 - Priest John's Busiest Day(2-SAT)
题意:有N场婚礼,每场婚礼的开始时间为Si,结束时间为Ti,每场婚礼有个仪式,历时Di,这个仪式要么在Si时刻开始,要么在Ti-Di时刻开始,问能否安排每场婚礼举行仪式的时间,使主持人John能参加所 ...
- 后台动态设置前台标签内容和属性(转自http://www.wzsky.net/html/Program/net/26171.html)
和以前的asp不同,在asp.net中为了彻底的代码分离,我们一般不采用<%=%>嵌入标签中来设置一些属性和内容.一般来说有2种情况:(一)设置标签的内容,比如<title>这 ...
- C#调用存储过程详解
连接字符串: string conn = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].C ...
- UI:UINavigationController、界面通信
IOS中实现对控制器的管理的控制器有:UINavigationController 和 UITableBarController 两个控制器.下面是主要学习前者. 参考 ⼀.UINavigationC ...
- Android Studio @Bind的用法,自动生成findViewById无需再实例化控件
第一步:app 的build.gradle文件中添加 如下代码: compile 'com.jakewharton:butterknife:7.0.0' 点击Sync Now 同步下载第二步:安装插件 ...
- Oracle数据库多语言文字存储解决方案
一.关于字符集 字符集(也称字元集,Character Set)就是字符编码表(codepage),一个字符不论英文.中文.韩文等在计算机系统内存或硬盘中通过二进制的字节(Byte)保存,这个二进制的 ...
- 汉字简体繁体转换----Javascript
最近看到有个简体--繁体字互相转换的程序,是用JS实现的,感觉很好玩,所以拿来研究研究.先看看界面如下: 汉字简体繁体转换 // 0&&parent.frames.length) { ...
- cocos2dx 网络编程(CCHttpRequest和CURL两个方式)
转自:http://blog.csdn.net/sg619262284/article/details/20144087 在使用之前需要设置一些参数:参考:http://blog.csdn.net/w ...
- jquery动态创建form并提交到.ashx文件处理
有时候在写web 应用的时候,需要临时动态构造一个form 并提交,form 里面的参数以及action,以及是post请求还是get请求,甚至form 的样式都是可以指定的,用原生的java ...
- jquery禁用右键、文本选择功能、复制按键的实现
同时适合IE.firefox.谷歌浏览器下适用,经过筛选代码如下 //禁用右键.文本选择功能.复制按键 $(document).bind(“contextmenu”,function(){return ...