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游标使用详解: 游标: 用来查询数据库,获取记录集合(结果集)的指针,我们所说的游标通常是指显式游标,因此从现在起没有特别指明的情况,我们所说的游标都是指显式游标.要在程序中使用游标,必须 ...
随机推荐
- vue中动态样式不起作用? scoped了解一下
vue中style标签使用属性scoped的注意事项 style上添加属性scoped可以实现样式私有化,但是在使用动态样式时,样式会不起作用.可以先去掉scoped
- NodeMan介绍
近年来,随着nodejs的突飞猛进,node项目数量增长迅猛,node项目完美的阐释了“开箱即用”的理念.小到创业公司,大到阿里这样的巨头,背后均有node的身影. node项目基于Chrome的V8 ...
- Postman接口自动化测试实例
一.实例背景 在实际业务中,经常会出现让用户输入用户密码进行验证的场景.而为了安全,一般都会先请求后台服务器获取一个随机数做为盐值,然后将盐值和用户输入的密码通过前端的加密算法生成加密后串传给后台服 ...
- Lintcode: Nuts & Bolts Problem
Given a set of n nuts of different sizes and n bolts of different sizes. There is a one-one mapping ...
- 阿里云mysql安装配置(CentOS 7.3 64)
自建目录并且加载yum资源mysql 安装 回车之后竟然出现不可以的情况(原因是原来的镜像里面默认装好了mysql5.7) 然后只能尝试跳过密码登录 #vim /etc/my.cnf 在文档内搜索my ...
- windows10误删Administrator用户的家目录之后
今天在玩Windows10的用户管理的时候,把Administrator用户给开启了,然后还用这个用户登录了系统. 结果就是,第一次登录的时候,闪过一条条初始化配置欢迎信息,Windows系统为Adm ...
- Linux内核开发进阶书籍推荐(不适合初学者)
Linux内核开发进阶书籍推荐(不适合初学者) 很早之前就想写一篇文章总结一下Linux Kernel开发的相关资料,项目的原因,再加上家里的一些事情,一直没能找到闲暇,今天终于有些时间,希望可以完成 ...
- C++ STL stack 用法
Stack(栈)是一种后进先出的数据结构,也就是LIFO(last in first out) ,最后加入栈的元素将最先被取出来,在栈的同一端进行数据的插入与取出,这一段叫做“栈顶”. 使用STL的s ...
- 使用Redux DevTools浏览器插件调试redux
与redux的Devtools模块不同,该工具主要依赖浏览器插件完成.模式也比Devtools简单点. step1 下载插件 Chrome地址(360极速模式也可以用): https://chrome ...
- P1772 [ZJOI2006]物流运输
题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪. ...