--------------坚持写一点 慢慢成长 希望对大家有所帮助(小白的理解)  也是自己学习后的理解(只是一小部分,需要更深沉的还需日后成长)

接下来就是我们的重点

--游标

提供了一种对从表中检索出的数据进行操作的灵活手段,

从表中检索出结果集,从中每次指向一条记录进行交互的机制.

能对多条数据 每一条数据进行判断

--游标的作用

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 游标分析与理解(基础)的更多相关文章

  1. Oracle漏洞分析(tns_auth_sesskey)

    p216 Oracle漏洞分析: 开启oracle: C:\oracle\product\\db_1\BIN\sqlplus.exe /nolog conn sys/mima1234 as sysdb ...

  2. Oracle 游标示例,带异常处理

    Oracle游标示例一则,带异常处理. DECLARE CURSOR c_dl IS SELECT ID, NSRSBH, WSPZXH, ZXYY_DM, HZRQ, SWJG_DM, GXSJ F ...

  3. Oracle游标带参数

    Oracle游标是可以带参数的,而SqlServer的游标就不可以了 create or replace procedure a as cursor b(c_id int)is select * fr ...

  4. Oracle 游标使用(转)

    这个文档几乎包含了oracle游标使用的方方面面,全部通过了测试 ; ; dbms_output.put_line(sql) loop dbms_output.put_line( ; ; ; r_te ...

  5. Oracle 游标使用全解(转)

    转自:http://www.cnblogs.com/sc-xx/archive/2011/12/03/2275084.html 这个文档几乎包含了oracle游标使用的方方面面,全部通过了测试 -- ...

  6. Oracle游标动态赋值

    1. oracle游标动态赋值的小例子 -- 实现1:动态给游标赋值 -- 实现2:游标用表的rowtype声明,但数据却只配置表一行的某些字段时,遍历游标时需fetch into到精确字段 CREA ...

  7. dapper支持oracle游标

    dapper支持oracle游标 Dapper是一个轻型的ORM类.它有啥优点.缺点相信很多朋友都知道了,园里也有很多朋友都有相关介绍,这里就不多废话. 如果玩过Oracle都知道,存储过程基本都是通 ...

  8. Oracle游标的使用示例

    此文是使用Oracle游标的几种方式,for...in会自动打开游标,fetch...into需要手动打开游标,游标类似于一个只会往前移动的指针,每次指向数据集中的一行数据,通过游标可以打开数据集,也 ...

  9. Oracle游标介绍

    Oracle游标使用详解: 游标: 用来查询数据库,获取记录集合(结果集)的指针,我们所说的游标通常是指显式游标,因此从现在起没有特别指明的情况,我们所说的游标都是指显式游标.要在程序中使用游标,必须 ...

随机推荐

  1. VS2017 + EF6连接MySql

    VS2017 + EF6连接MySql   原地址:https://blog.csdn.net/mzhifa/article/details/80999105 VS2017 + EF6连接MySql ...

  2. Hadoop集群故障诊断

    集群故障诊断通行方法:1.cloudera manager 监控和管理软件本身出问题了(没有任何数据),集群还是好的,业务还在正常跑:2.监控软件是好的,从监控里发现了很多问题,如CPU飙高.内存飙高 ...

  3. Linux删除奇怪名字文件

    use ls -ilrt get filenum and use find ./ -inum filenum -exec rm '{}' \; del it

  4. 大兄dei,早点看清this吧

    说道this,可以说是前端中很重要的问题之一了,也是面试或者笔试常考的问题.所以还是早点看清this吧,大兄dei. this是什么?为什么要存在? this关键字是js中最最复杂的机制之一.他被自动 ...

  5. 父网访问子网(校园网访问校园网IP路由器下的一台电脑)远程路由器下的电脑

    网路由器添加转发规则,端口转发,本人仅使用Pandora Box路由器固件 当然设置了这些还不够,还需要设置其他的允许端口转发的东西,例如 然后远程桌面的话还需要设置某些相关设置,例如电脑允许使用远程 ...

  6. CentOS-7.3 设置静态 ip

    1. VMnet8 必须设置固定 ip,否则会发生:虚拟机可以访问主机和外网,但是主机 windows 却访问不了虚拟机 2. 虚拟网络编辑器设置网关 IP(G): 必须与 VMnet8 的 ip 在 ...

  7. 日常开发自己遇到异常(BUG未完待续!!!)

    在面试的时候经常会被问到你在项目中遇到的bug有哪些,或者你感觉你解决什么问题让你感觉有成就感.以此类似的面试问答,楼主现在开始不断更新日常遇到的BUG汇总 1:ConcurentModificati ...

  8. Java里面使用Date.compareTo比较时间

    DateFormat dateFormat = DateFormat.getDateInstance(); Date oldTime = dateFormat.parse("2019-04- ...

  9. IP通信基础学习第三周(下)

    TTL的最值是255. 数据部分不参与检验和的计算. 接收端的结果若为0,则保留:否则,会丢弃该数据报. IP数据报选项字段是可选的,主要用于网络测试和调试. IP辅助协议ICMP的消息类型有错误消息 ...

  10. C语言输出

    转自:https://blog.csdn.net/u014647208/article/details/53337315 int PrintVal = 9; /*按整型输出,默认右对齐*/ print ...