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

接下来就是我们的重点

--游标

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

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

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

--游标的作用

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. Mac OS 安装robotframework

    1,查看当前系统默认的Python路径 which python1==> /usr/bin/python 2,查看当前python 版本 python1==> Python 2.7.10 ...

  2. java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?

    当新对象被创建的时候,构造函数会被调用.每一个类都有构造函数.在程序中没有给类提供构造函数的情况下,Java编译器会为这个类创建一个默认的构造函数 Java中构造函数重载和方法重载很相似.可以为一个类 ...

  3. 69.js--点击事件等比例弹出层div

    html:<!--弹出层导航栏--> <div class="public-nav-content"> <ul> <li><a ...

  4. dede织梦手机站m文件夹功能基础详解

    织梦2015年6月8日更新后,就添加了很多针对手机移动端的设计,最大的设计就是添加了生成二维码的织梦标签和织梦手机模板功能,织梦更新后,默认的 default模板中就包含手机模板,所以我们可以给织梦网 ...

  5. 201905<<金字塔原理>>

    金字塔原理是本好书,主要从写作,思考,解决问题三个方面讲解了如何使用金字塔结构来分析.自下而上的分析,自上而下的表达,解决问题时先确定问题的四要素,搭建三棱镜框架,再解决问题.三棱镜分析问题的方法感触 ...

  6. PAT (Basic Level) Practice (中文)1006 换个格式输出整数 (15 分)

    题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805318855278592 #include <iost ...

  7. 连阿里都在用它处理亿万级数据统计,论其对Java程序员的重要性!

    一.了解淘宝Kafka架构 在ActiveMQ.RabbitMQ.RocketMQ.Kafka消息中间件之间,我们为什么要选择Kafka?下面详细介绍一下,2012年9月份我在支付宝做余额宝研发,20 ...

  8. Linux服务器 XAMPP后添加PHP和MYSQL环境变量

    编辑/etc/profile文件 在文件末尾添加两行代码 vi /etc/profile CentOS: PATH=$PATH:/opt/lampp/bin export PATH Ubuntu: e ...

  9. Java ascii码值转为输出ascii码

    Java ascii码值转为输出ascii码 public static void main(String[] args) { // TODO Auto-generated method stub S ...

  10. Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析

    Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析 今天发一篇”水文”,可能很多读者都会表示不理解,不过我想把它作为并发序列文章中不可缺少的一块来介绍.本来以为花不了 ...