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 ...
随机推荐
- HDU 3920Clear All of Them I(状压DP)
HDU 3920 Clear All of Them I 题目是说有2n个敌人,现在可以发n枚炮弹,每枚炮弹可以(可以且仅可以)打两个敌人,每一枚炮弹的花费等于它所行进的距离,现在要消灭所有的敌人 ...
- mysql中间件研究(Atlas,cobar,TDDL)
mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等,但其不支持大数据量的分库分表且性能较差.下面介绍几款能代替其的mysql开源中间件产品,Atlas ...
- STL 速解
STL(Standard Template Library)是C++的标准模版库. STL概述 STL的一个重要概念是数据结构和算法的分离,这使得STL变得十分通用.例如:由于STL的sort()函数 ...
- (C++)String的用法
(转自http://www.cnblogs.com/yxnchinahlj/archive/2011/02/12/1952550.html) 之所以抛弃char*的字符串而选用C++标准程序库中的st ...
- (剑指Offer)面试题14:调整数组顺序使奇数位于偶数前面
题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 如果去掉约束条件: ...
- AS:加载新版本的SWF文件。
方案一: 文件名+版本号,区别对待不同的版本控制,有设定值后会加上_v_x的后缀名.如:加载主文件 main.swf, 被命名为:Main_v_60.swf . 方案二: loader.load(ne ...
- CloudStack采用spring加载bean(cloud-framework-spring-module模块)
CloudStackContextLoaderListener /* * Licensed to the Apache Software Foundation (ASF) under one * or ...
- GridView实现多表头合并[转]
1.这里先介绍单纯的GridView多表头合并,先上图: 可以看到,上图就是生成的多表头,具体的后台代码是在Row_Created事件中创建的.先看创建代码: protected void GridV ...
- 比较长的sql语句
SELECT o. * FROM hq_goods g LEFT JOIN hq_orders o ON o.goods_id = g.id WHERE o.user_id =73 AND o.sta ...
- 微信公共服务平台开发(.Net 的实现)6-------自定义菜单
用户自定义菜单制作时,需要用到access_token,我们直接使用前面讲解的IsExistAccess_Token()函数.我理解的微信公共平台里面菜单分为button和sub_button,即菜单 ...