1.游标是:

一种PL/SQL控制结构,相当于java中的Iterator ,它是指向结果集的指针。指向结果集第一条记录的前一条,每次fetch 都会向下移动下

游标并不是一个数据库对象,只是存留在内存中

2. 作用:方便对表的行数据逐条进行处理

---------------

--注意:fetch是下移动,%found是判断此行有无数据的--这是作为循环的跳出条件的,定要注意--for循环除外

---注意:%found 与%notfound的区别--%found是判断此行有没有数据,有的的时候执行;%notfound 判断当前行是否有数据,没有则停止执行

--在打开游标之前最好先判断游标是否已打开  %isopen

eg:

IF mycur%ISOPEN THEN

null ;

ELSE

OPEN mycur ;

END IF ;

--可以使用ROWCOUNT对游标所操作的行数进行记录。%rowcount

----------------

3.使用游标;

声明游标

cursor c is     --声明

select * from emp;   ---结果集

打开游标

open c;---此时才会指向 结果集;--指向结果集第一条记录之前。

循环抓取游标

fetch c into 记录类型的变量;---将抓取得游标赋给一个记录类型的变量

---每次只能读取一行,若是想要遍历,就要有循环。

---每当遇到fetch 指针就会向下移动一下。

关闭游标

close c;

---

eg:

declare

cursor c is

select * from emp;

v_record_emp emp%rowtype;

v_sal emp.sal%type;

begin

open c;

loop

fetch c into v_record_emp;

exit when(c%notfound);

v_sal := v_record_emp.sal;

if(v_sal < 1200) then

v_record_emp.sal := v_sal + 500;

elsif(v_sal < 1500) then

v_record_emp.sal := v_sal + 300;

else

v_record_emp.sal := v_sal + 300;

end if;

update emp set sal=v_record_emp.sal where empno=v_record_emp.empno;

end loop;

close c;

commit;

end;

------------

使用for循环可以简化游标使用时候的代码(比较常用)

declare

cursor c is

select * from emp;

v_sal emp.sal%type;

begin

for v_record_emp in c loop---就完成了打开游标,抓取游标,和关闭游标

v_sal := v_record_emp.sal;

if(v_sal < 1200) then

v_record_emp.sal := v_sal + 500;

elsif(v_sal < 1500) then

v_record_emp.sal := v_sal + 300;

else

v_record_emp.sal := v_sal + 300;

end if;

update emp set sal=v_record_emp.sal where empno=v_record_emp.empno;

end loop;

commit;

end;

-------------------

游标分:

1.可更新的游标

declare

cursor c is

select * from emp for update;--比普通的多  for update

begin

for v_record_emp in c loop

if(v_record_emp.sal<2000) then

update emp set sal=sal*2 where current of c;  --条件 current of c

elsif(v_record_emp.sal=5000) then

delete from emp where current of c;

end if;

end loop;

commit;

end;

----需要用  for update 来标识 遍历是给该结果集更新为目的的

----可更新的游标,我们能够用current of c获取到 当前记录

2.带参数的游标

declare

cursor c(v_deptno emp.deptno%type,v_job emp.job%type) is

select ename,sal from emp where deptno=v_deptno and job=v_job;

begin

for v_temp in c(30,'CLERK') loop

dbms_output.put_line(v_temp.ename);

end loop;

end;

---带参数的目的是为了  设置获取参数的条件

---游标的参数是在open游标的时候赋值的---open c(30,'clerk');

3.隐士游标

当用户在PL/SQL 中使用数据操纵语句(DML)时,

oracle预先定义一个名称为SQL的隐式游标,

通过 检查隐式游标的属性获取与最近执行的SQL语句相关信息。

在执行DML语句之后,隐式游标属性返回信息。

隐式游标属性包括: %found %notfound %rowcount %isopen

eg: sql%rowcount中的sql是oracle的内部游标,rowcount的意思是之前的dml sql语句影响的多少行数据。

eg:

declare

begin

update B_BARCODE_JINZHI_T set jinzhi='00';

dbms_output.put_line(to_char(sql%rowcount));

end;

---结果: 5

oracle游标指针移动时机,oracle--游标(cursor)相关推荐

  1. oracle有集合为什么要用游标,oracle 游标使用

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

  2. 【Oracle】PL/SQL 显式游标、隐式游标、动态游标

    在PL/SQL块中执行SELECT.INSERT.DELETE和UPDATE语句时,Oracle会在内存中为其分配上下文区(Context Area),即缓冲区.游标是指向该区的一个指针,或是命名一个 ...

  3. 使用oracle 游标修改数据,修改oracle数据库游标

    SQL游标原理和使用方法 版权声明:本文为博主原创文章,未经博主允许不得转载.https://blog.csdn.net/chinahuyong/article/details/3552248 SQL ...

  4. oracle 游标while循环嵌套,oracle游标循环的嵌套

    完成批量修改user_tables中的所有表的栏位名(从MS SQL导入过来,发现大小写问题,造成很多麻烦) 存储过程见下: -- Created on 2012/3/14 by FREE decla ...

  5. oracle 游标当方法参数,Oracle游标、参数的使用例子

    /// /// 总部审核 /// /// /// public int Update(Hashtable ht) { //修改 StringBuilder sb = new StringBuilder ...

  6. Oracle 11g Release 1 (11.1) 游标——显式游标

    http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/static.htm#CIHCAHJA 本文内容 声明一个游标 打开一个游标 用游标获取一个 ...

  7. oracle父游标和子游标,诊断Oracle high version count(高版本游标)问题

    什么是high version cursor(高版本游标)?对于一个特定的游标有多少个版本就属于高版本游标是没有明确定义的.对于不同的系统有不同 什么是high version cursor(高版本游 ...

  8. oracle数据库游标是什么意思,oracle数据库游标用法详解

    oracle 游标用法详解 1.什么是游标 游标是一种PL/SQL控制结构,可以对SQL语句进行显示控制,便于对表的数据逐条进行处理 2.游标分类 显示游标: Declared and named b ...

  9. oracle学习总结2(pl/sql 游标 异常的处理 存储过程和函数 包 触发器)

    pl/sql的学习 给sql添加了逻辑判断与流程控制的功能 语法: declare begin exception end; 运算符 重要的就是赋值运算符了:=        连接  ||       ...

最新文章

  1. BZOJ 2733 | 洛谷 P3224 [HNOI2012]永无乡
  2. sql优化技巧_使用这些查询优化技巧成为SQL向导
  3. Android学习笔记之图像颜色处理(ColorMatrix)
  4. 【语言处理与Python】4.7算法设计
  5. Java 杨辉三角的简单实现
  6. apache SSL配置
  7. 在嵌入式uClibc上移植valgrind
  8. MySQL相关文档索引
  9. 「SAP技术」SAP MM 启用了MPN物料管理的物料,物料主数据与源清单数据有啥不同?
  10. Visual Studio开源库集成器Vcpkg全教程--利用Vcpkg轻松集成开源第三方库
  11. 零基础搭建双端影视盒子——一、搭建运行环境
  12. 给计算机老师的元旦祝福,元旦祝福语送老师_简短的送给老师的元旦祝福
  13. 【学术写作规范】论文写作注意事项
  14. Bigemap支持百度地图
  15. c语言大地坐标转换空间坐标,空间直角坐标系与大地坐标系转换程序
  16. ROS导航【01】: move_base包(导航和路径规划)
  17. Python初探(一)
  18. 你们知道怎么将图片转成ico? 小妙招分享给你
  19. python如何定义矩阵_基础 | Python下的矩阵定义 (下)
  20. dac104s085芯片驱动讲解

热门文章

  1. 前端基础21:正则基础
  2. iOS 点击推送消息跳转指定界面 —总结篇
  3. Android 简单天气预报
  4. Android adb input 命令介绍
  5. Xcode 6.3 Ineligible Devices 临时解决方法
  6. HDU 1828 Picture 线段树 扫描线
  7. [java]apache server与 tomcat 的区别以及整合
  8. python获取原图GPS位置信息,轻松得到你的活动轨迹
  9. 前端JS通过Ajax下载后端返回的Excel文档
  10. NLP CV ML future