【转】oracle中的游标的原理和使用详解
游标 游标的简介: 
逐行处理查询结果,以编程的方式访问数据
游标的类型:
1,隐式游标:在 PL/SQL 程序中执行DML SQL 语句时自动创建隐式游标,名字固定叫sql。
2,显式游标:显式游标用于处理返回多行的查询。
3,REF 游标:REF 游标用于处理运行时才能确定的动态 SQL 查询的结果
隐式游标:
q在PL/SQL中使用DML语句时自动创建隐式游标 q隐式游标自动声明、打开和关闭,其名为 SQL
q通过检查隐式游标的属性可以获得最近执行的DML 语句的信息 q隐式游标的属性有: q%FOUND – SQL 语句影响了一行或多行时为
TRUE q%NOTFOUND – SQL 语句没有影响任何行时为TRUE q%ROWCOUNT – SQL 语句影响的行数 q%ISOPEN -
游标是否打开,始终为FALSE
|
在select中有两个中比较常见的异常: 1. NO_DATA_FOUND 2. TOO_MANY_ROWS
|
显式游标:

sqlserver与oracle的不同之处在于: 最后sqlserver会deallocate 丢弃游标,而oracle只有前面四步: 声明游标、打开游标、使用游标读取记录、关闭游标。
显式游标的使用:
|
REF游标也叫动态游标:
qREF 游标和游标变量用于处理运行时动态执行的 SQL 查询 q创建游标变量需要两个步骤: q声明 REF 游标类型 q声明 REF 游标类型的变量 q用于声明 REF 游标类型的语法为:
TYPE <ref_cursor_name> IS REF CURSOR
[RETURN <return_type>];
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
-----------------------------------ref游标---------------------------------declaretype ref_cursor is ref cursor; --声明一个ref游标类型tab_cursor ref_cursor ;--声明一个ref游标sname student.xm %type ;sno student.xh %type ;tab_name varchar2 (20 );begin tab_name := '&tab_name'; --接收客户输入的表明 if tab_name = 'student' then open tab_cursor for select xh ,xm from student ; --打开ref游标 fetch tab_cursor into sno ,sname ;--移动游标 while tab_cursor %found loop dbms_output.put_line ('学号:' ||sno ||'姓名:' ||sname ); fetch tab_cursor into sno ,sname ; end loop; close tab_cursor ; else dbms_output.put_line ('没有找到你想要找的表数据信息' ); end if; end; -----------------------------------ref游标题目---------------------------------SQL > select * from student ; XH KC---------- ---------- 1 语文 1 数学 1 英语 1 历史 2 语文 2 数学 2 英语 3 语文 3 英语9 rows selectedSQL > 完成的任务 :生成student2表 (xh number, kc varchar2 (50 ));对应于每一个学生,求出他的总的选课记录,把每个学生的选课记录插入到student2表中。即,student2中的结果如下: XH KC --- ------------------------------------------- 1 语文数学英语历史 2 语文数学英语 3 语文英语create table student2 (xh number, kc varchar2 (50 ));declarekcs varchar2 (50 );kc varchar2 (50 );type ref_cursor is ref cursor; --声明一个ref游标类型stu_cursor ref_cursor ;--定义一个ref游标类型的变量type tab_type is table of number; --声明一个table类型tab_xh tab_type ;--定义一个表类型的变量cursor cursor_xh is select distinct( xh) from student; --声明一个游标begin open cursor_xh; --打开游标 fetch cursor_xh bulk collect into tab_xh; --提取数据到表中 for i in 1 .. tab_xh.count loop kcs :='' ; open stu_cursor for select kc from student s where s.xh = tab_xh(i ); --打开ref游标 fetch stu_cursor into kc ; --移动游标 while stu_cursor %found loop kcs := kc ||kcs ; --连接字符串使用||而不是+ fetch stu_cursor into kc ; --移动游标 end loop; insert into student2 (xh , kc ) values( i, kcs); close stu_cursor ; end loop; close cursor_xh ; end; |
【转】oracle中的游标的原理和使用详解的更多相关文章
- Oracle中的游标的原理和使用详解
游标的简介 逐行处理查询结果,以编程的方式访问数据. 游标的类型: 1,隐式游标:在 PL/SQL 程序中执行DML SQL 语句时自动创建隐式游标,名字固定叫sql. 2,显式游标:显式游标用于处理 ...
- oracle中的exists 和not exists 用法详解
有两个简单例子,以说明 “exists”和“in”的效率问题 1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ; ...
- oracle中的exists 和not exists 用法详解(转)
有两个简单例子,以说明 “exists”和“in”的效率问题 1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ; ...
- oracle中去掉回车换行空格的方法详解
函数: 1.translate语法:TRANSLATE(char, from, to)用法:返回将出现在from中的每个字符替换为to中的相应字符以后的字符串. 若from比to ...
- oracle中检索结果汉字首字母排序详解
今天写需求,要求将结果按照成本中心首字母排序,平且空放在最前面. 进入正题: 1.使用oracle自带的函数: 按照首字母排序:nlssort(xxx,'NLS_SORT=SCHINESE_PINYI ...
- oracle 中的游标
oracle 中的游标 通俗易懂的sql代码直接上! --简单的游标使用滴呀 --使用FOR OBJ IN OBJS LOOP ......END LOOP; DECLARE CURSOR C_JOB ...
- Oracle中使用游标转换数据表中指定字段内容格式(拼音转数字)
应用场景:将数据表TB_USER中字段NNDP的内容中为[sannanyinv]转换为[3男1女] 主要脚本:一个游标脚本+分割字符串函数+拼音转数字脚本 操作步骤如下: 1.创建类型 create ...
- Oracle中使用游标获取指定数据表的所有字段名对应的字符串
操作步骤:打开PLSQL Developer后,直接执行下面的语句就可以出来 --Oracle中使用游标获取指定数据表的所有字段名对应的字符串 declare mytablename VARCHAR( ...
- Oracle中的SQL分页查询原理和方法详解
Oracle中的SQL分页查询原理和方法详解 分析得不错! http://blog.csdn.net/anxpp/article/details/51534006
随机推荐
- java php 等,路径 上级路径,上上级路径表示方法
如何表示上级目录 ../表示源文件所在目录的上一级目录,../../表示源文件所在目录的上上级目录,以此类推. ../表示源文件所在目录的上一级目录,../../表示源文件所在目录的上上级目录,以此类 ...
- windows开机后键盘失灵(非硬件原因)解决办法
今天来了,开机时突然发现输入密码时,键盘不管用了,试了一下键盘没问题,插口也没问题,能进入安全模式,很奇怪,昨天好好的今天却不能用了,找人倒腾了大半天也没搞出来,后来用PE盘消掉了密码,总算进入了系统 ...
- ftk学习记(滑动条篇)
[声明:版权全部,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 前一篇说到了combox.就先看一下效果吧. 说完了combox,就谈谈今天的滑动条.滑动条,当然 ...
- 变量命名神器Codelf
个人感觉,当觉得命名困难的时候,其实是因为还没有想清楚这个变量.这个方法或者这个类是要干什么,还不能用一个或几个词准确描述它的工作,才觉得无法命名,这是命名的最困难的阶段.而只要想清楚了它的任务,命名 ...
- 谈一谈python的垃圾回收机制
[python的垃圾回收机制是怎么实现的] 在C语言时代程序员要负责内存的申请和释放,虽然这样的程序可以对资源进行精细的控制.但是它也有它的问题.这就要求程序员 要写许多与业务逻辑无关的内容在代码里面 ...
- python yield的解释
链接地址: http://pyzh.readthedocs.io/en/latest/the-python-yield-keyword-explained.html https://www.jians ...
- iconv 使用方法封装
std::string iconv_exec(const std::string& in, const char* fromcode, const char* tocode) { char b ...
- Unity获取插件所在目录的巧妙方法
编写插件时,Unity没有提供当前被放置目录的功能.比如资源商店的一些插件需要放在Assets根目录下. 但通过脚本可以反求出所在目录,对于自己写的插件,就避免了类似问题: var scriptObj ...
- Android4.42-Settings源代码分析之蓝牙模块Bluetooth总体实现(总)
本文为博主原创,转载请注明出处:http://blog.csdn.net/zrf1335348191/article/details/50995466 蓝牙相关代码已在另两篇文章中介绍,有须要的能够查 ...
- django搭建一个小型的服务器运维网站-拿来即用的bootstrap模板
目录 项目介绍和源码: 拿来即用的bootstrap模板: 服务器SSH服务配置与python中paramiko的使用: 用户登陆与session; 最简单的实践之修改服务器时间: 查看和修改服务器配 ...