oracle 游标分析与理解(基础)
--------------坚持写一点 慢慢成长 希望对大家有所帮助(小白的理解) 也是自己学习后的理解(只是一小部分,需要更深沉的还需日后成长)
接下来就是我们的重点
--游标
提供了一种对从表中检索出的数据进行操作的灵活手段,
从表中检索出结果集,从中每次指向一条记录进行交互的机制.
能对多条数据 每一条数据进行判断
--游标的作用
1.指定结果集中特定行的位置.
2.基于当前的结果集位置检索一行或者连续的几行.
3.在结果集的当前位置修改行中的数据.
4.对其他用户所做的数据更爱定义不懂的敏感性级别.
5.可以以编程的方式访问数据库
可以看到结果集都标注了红色,大致意思就是把查询好的一个结果集当做一个表 然后我们在对这个结果集来进行一些操作.
--游标的状态
%Found:Fetch语句(获取记录)执行情况,返回Boolean类型
%NotFound:最后一条记录是否提取出,返回Boolean类型
%ISOpen:游标是否打开,返回Boolean类型
%RowCount:游标当前提取的行数.
--游标的创建
Declare
Cursor myCur is select empno,ename,sal from emp;
vna varchar2(10);
vno number(4);
vsal number(7,2) ;
Begin
open myCur;--打开游标
fetch myCur into vno,vna,vsal;--fetch 游标名 into 属性变量
dbms_output.put_line(vno||' '||vna||' '||vsal);--打印
close myCur;--关闭游标
End;
--可以看到上面的方法非常的繁琐 如果像这样每次都要打开游标然后吧东西存到变量里面再打印出来最后关闭游标 岂不是很麻烦 所以 有一种方法能够省去一些步骤也能实现同样的功能
那就是下面说的这种方法 便利循环游标 就是用for循环写的 省去了一些代码
循环游标隐式打开游标,自动滚动获取一条记录,并自动创建临时记录类型变量存储记录,处理完后自动关闭游标.
for 变量名 in 游标名
loop
数据处理sql语句;
end loop;

--再介绍一下刚说的功能(对多条数据每一条数据进行判断) 如果用存储过程写的话要写好几条语句用游标只需要一条 即
--创建一个游标
--把c语言成绩大于等于90分的+5分
--大于等于八十小于就是的+10分
--小于80分的+20分
对多条数据 每一条数据进行判断
DECLARE
CURSOR cur IS SELECT c.*
FROM chenji c,kechen k
WHERE c.kno=k.kno AND k.kname='C';
BEGIN
FOR cun IN cur--把游标直接赋予cun变量了(省去上面的一个步骤)
LOOP
IF cun.score>=90 THEN--分支
cun.score:=cun.score+5;
ELSIF cun.score>=80 THEN--分支
cun.score:=cun.score+10;
ELSIF cun.score<80 THEN--分支
cun.score:=cun.score+20;
END IF;--结束分支
UPDATE chenji SET score=cun.score WHERE kno=cun.kno AND stuno=cun.stuno;
COMMIT; --修改后的提交方法
END LOOP; --结束循环
END;
loop的写法容易写错不建议使用 这就没分享 for循环比较熟悉一些不容易写错 公认比较好的

--如果说我们要一直使用这个游标那么就要每次选中然后执行这样是不是太麻烦了呢?
--那么就有一种办法解决这一麻烦的操作 上一次说的存储过程相当于一个方法 这一块就可以把游标和存储过程写在一起想要使用的时候直接调用就行了
CREATE OR REPLACE PROCEDURE p1
AS
CURSOR cur IS
SELECT cj.stuno,cj.kno,cj.score
FROM kecheng k,chengji cj
WHERE k.kno=cj.kno AND
k.kname='C';
BEGIN
FOR ccc IN cur -- 循环取出每一条数据
LOOP
--dbms_output.put_line(ccc.stuno||'-'||ccc.kno||'-'||ccc.score);
IF ccc.score>=90 THEN -- 判断条件 3条分支
ccc.score:=ccc.score+5;
ELSIF ccc.score>=80 AND ccc.score<90 THEN
ccc.score:=ccc.score+10;
ELSIF ccc.score<80 THEN
ccc.score:=ccc.score+20;
END IF;
--- 成绩已经计算出来,开始修改数据库表
UPDATE chengji SET score=ccc.score
WHERE stuno=ccc.stuno AND
kno=ccc.kno;
END LOOP;
END;
SELECT * FROM chengji;--中间查询用的
-- 调用
DECLARE
BEGIN
p1();--调用
END;
好了 自己的见解就这些希望给需要的朋友一些帮助 自己也是个小白 还是那句话慢慢成长
在这也推荐一个大佬 我有一些不知道怎么解释的就借鉴他的@不经意的回眸https://www.cnblogs.com/miciing/articles/2783026.html
好东西就要拿出来分享 拜拜!
时间2019-3-2 凌晨0:17分
HaoDi888
oracle 游标分析与理解(基础)的更多相关文章
- Oracle漏洞分析(tns_auth_sesskey)
p216 Oracle漏洞分析: 开启oracle: C:\oracle\product\\db_1\BIN\sqlplus.exe /nolog conn sys/mima1234 as sysdb ...
- Oracle 游标示例,带异常处理
Oracle游标示例一则,带异常处理. DECLARE CURSOR c_dl IS SELECT ID, NSRSBH, WSPZXH, ZXYY_DM, HZRQ, SWJG_DM, GXSJ F ...
- Oracle游标带参数
Oracle游标是可以带参数的,而SqlServer的游标就不可以了 create or replace procedure a as cursor b(c_id int)is select * fr ...
- Oracle 游标使用(转)
这个文档几乎包含了oracle游标使用的方方面面,全部通过了测试 ; ; dbms_output.put_line(sql) loop dbms_output.put_line( ; ; ; r_te ...
- Oracle 游标使用全解(转)
转自:http://www.cnblogs.com/sc-xx/archive/2011/12/03/2275084.html 这个文档几乎包含了oracle游标使用的方方面面,全部通过了测试 -- ...
- Oracle游标动态赋值
1. oracle游标动态赋值的小例子 -- 实现1:动态给游标赋值 -- 实现2:游标用表的rowtype声明,但数据却只配置表一行的某些字段时,遍历游标时需fetch into到精确字段 CREA ...
- dapper支持oracle游标
dapper支持oracle游标 Dapper是一个轻型的ORM类.它有啥优点.缺点相信很多朋友都知道了,园里也有很多朋友都有相关介绍,这里就不多废话. 如果玩过Oracle都知道,存储过程基本都是通 ...
- Oracle游标的使用示例
此文是使用Oracle游标的几种方式,for...in会自动打开游标,fetch...into需要手动打开游标,游标类似于一个只会往前移动的指针,每次指向数据集中的一行数据,通过游标可以打开数据集,也 ...
- Oracle游标介绍
Oracle游标使用详解: 游标: 用来查询数据库,获取记录集合(结果集)的指针,我们所说的游标通常是指显式游标,因此从现在起没有特别指明的情况,我们所说的游标都是指显式游标.要在程序中使用游标,必须 ...
随机推荐
- SQL SERVER-时间戳(timestamp)与时间格式(datetime)互相转换
SQL里面有个DATEADD的函数.时间戳就是一个从1970-01-01 08:00:00到时间的相隔的秒数.所以只要把这个时间戳加上1970-01-01 08:00:00这个时间就可以得到你想要的时 ...
- JavaScript 区分中英文字符的两种方法: 正则和charCodeAt()方法
正则无疑是最强大的判断各种条件的方法, 最近也在研习它, 虽然枯燥, 但仍有乐趣. 用它来判断一个双字节的中文字符也是轻而易举地. 而判断中文字符, 简单且执行效率高. regExpForm.onb ...
- jsp与jsp页面间的值传递与接收
1.使用<a>标签 传递值 <a href="index.jsp?name=增加数据">增加数据</a> ///////目标页面/////值// ...
- Java课堂测试——一维数组
题目: 一个典型的流程是: 2. 用户这时候有两个选择2.1 按 单步执行 键, 在 GUI 看到你的程序是如何一步一步算出目前最大子数组的范围,当前计算到的临时子数组是在哪里,等等. 最好用不同的 ...
- 一个简单小技巧实现手机访问.html文件网页效果
注册登录Github不解释 settings设置往下拉 选择一个主题上传代码文件到code 打开这个文件选择此时的网址 在网址前面加上 这段代码 http://htmlpreview.github.i ...
- 使用JavaScript实现单向链表
一.实现功能 1.链表元素头部插入 this.unShift = function(data) {} 2.链表元素尾部插入 this.append= function(data) {} //返回boo ...
- 二进制方式安装mysql5.7.24
1.实验环境 [root@test-mysql ~]# cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) 2.浏览器下载mysq ...
- Linux机器重启情况查询
在实际开发过程中,有时可能发现有一些服务器的进程挂了,查询相关错误日志也没有头绪.此时需要考虑是否是由于机器重启导致的错误 使用命令last reboot来查看是否机器自动重启 导致服务器重启的原因有 ...
- java基础——IO流之File类
1.File类的构造方法: File(String pathName):通过一个指定的字符串类型路径来创建一个文件对象 File (String parent,String child):通过指定 ...
- 原创《weex面向未来的架构》
最近一直在做weex的调研工作,整理之后给公司做了一次技术分享. 分享内容如下: 1:Weex是什么? 2: Weex目前能做什么? 3: Weex 如何调试 4: 剖析一下Weex原理 5: ...