一:游标

Oracle会创建一个上下文区域,用于处理SQL语句,其中包含需要处理的语句、处理结果等等。

游标指向这一上下文的区域。

PL/SQL通过控制游标在上下文区域移动,来获取SQL语句的结果信息。

有两种类型的游标:

  • 隐式游标

  • 显式游标

二:隐式游标

对于DML操作(INSERT、UPDATE、DELETE)语句,Oracle会自动创建隐式游标指向该语句的上下文区域。

对于隐式游标,我们无法通过游标名来显式操作它,但是可以通过一些通用的属性来获取到最近的隐式游标指向的上下文区域中的信息,主要有:

%FOUND    如果一个INSERT,UPDATE或DELETE语句影响了一行或多行或SELECT INTO语句返回一行或多行,返回TRUE;否则,它将返回FALSE。
%NOTFOUND 与%FOUND相反。如果一个INSERT,UPDATE或DELETE语句影响没有行或SELECT INTO语句返回任何行,返回TRUE。否则,它将返回FALSE。
%ISOPEN 隐式游标总是返回FALSE,因为Oracle执行其相关的SQL语句之后自动关闭SQL游标。
%ROWCOUNT 返回受INSERT,UPDATE,或DELETE语句,或SELECT INTO语句影响的行数。

属性访问格式:sql%属性名

例如:

DECLARE
total_rows number(2);
BEGIN
UPDATE customers
SET salary = salary + 500;
IF sql%notfound THEN //获取执行结果
dbms_output.put_line('no customers selected');
ELSIF sql%found THEN
total_rows := sql%rowcount;
dbms_output.put_line( total_rows || ' customers selected ');
END IF;
END;

三:显式游标

显式游标 在DECLARE部分被定义,一般用于指向SELECT语句的执行结果。

1)创建游标

CURSOR cursor_name IS select_statement;

2)打开游标

打开游标分配内存,使得其接收所获取的sql语句的执行结果。

OPEN cursor_name;

3)获取当前游标所指向的行

获取一次,读取一行,并且读取完后自动移动到下一行。

FETCH cursor_name INTO 变量1, 变量2, 变量3...; //用变量依次获取当前行的各个字段值

4)关闭游标

关闭游标来释放分配的内存。

CLOSE cursor_name;

5)例子

DECLARE
c_id customers.id%type; //声明用于接收游标各个字段值的变量,变量的类型用 表名.字段名%type 来获取对应字段的数据类型
c_name customers.name%type;
c_addr customers.address%type;
CURSOR c_customers is //声明游标
SELECT id, name, address FROM customers;
BEGIN
OPEN c_customers; //打开游标
LOOP
FETCH c_customers into c_id, c_name, c_addr; //获取当前游标执行值
EXIT WHEN c_customers%notfound; //当游标指向末尾时,终止遍历
dbms_output.put_line(c_id || ' ' || c_name || ' ' || c_addr);
END LOOP;
CLOSE c_customers;
END;

PL/SQL学习笔记之游标的更多相关文章

  1. PL/SQL学习笔记_02_游标

    在 PL/SQL 程序中,对于处理多行记录的事务经常使用游标来实现. 为了处理 SQL 语句, ORACLE 必须分配一片叫上下文( context area )的区域来处理所必需的信息,其中包括要处 ...

  2. ORALCE PL/SQL学习笔记

    ORALCE  PL/SQL学习笔记 详情见自己电脑的备份数据资料

  3. Oracle之PL/SQL学习笔记

    自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...

  4. [Oracle] PL/SQL学习笔记

    -- 1. 使用一个变量 declare -- Local variables here v_name ); begin -- Test statements here select t.user_n ...

  5. PL\SQL学习笔记

    注释 单行--多行 一.declare一般用于做变量的申明.begin 程序体开始执行  end; 程序体结束exception .. dbms_output.put_line('绝对值'||v_ab ...

  6. PL/SQL学习笔记_01_基础

    PL/SQL语句可以在Oracle客户端的 SQL窗口或者 command  窗口中运行 在SQL窗口中运行步骤同 SQL语句 在command  窗口中运行的步骤如下: 1)File—new com ...

  7. PL/SQL学习笔记程序单元

    一:程序单元组成 一个PL/SQL程序单元主要包括三部分: 声明与定义部分:声明变量.常量.类型等:定义过程.函数等: 执行部分:执行PL/SQL语句:调用过程.参数:处理游标等: 异常处理部分:处理 ...

  8. PL/SQL学习笔记之包

    一:包 包是由一组相关的函数,过程,变量,游标等PL/SQL程序设计元素的组合而成的一个PL/SQL程序单元,相当于Java中的类. 包的主要作用是封装:把相同或相似的东西归类,方便维护和管理,提高开 ...

  9. PL/SQL学习笔记之异常

    一:异常 程序执行过程中出现错误情况被称为异常,主要有两种类型的异常: 系统定义的异常 用户定义的异常 二:系统定义的异常 Exception Oracle Error SQLCODE 描述 ACCE ...

随机推荐

  1. python 全栈开发,Day101(redis操作,购物车,DRF解析器)

    昨日内容回顾 1. django请求生命周期? - 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者po ...

  2. python 全栈开发,Day52(关于DOM操作的相关案例,JS中的面向对象,定时器,BOM,client、offset、scroll系列)

    昨日作业讲解: 京东购物车 京东购物车效果: 实现原理: 用2个盒子,就可以完整效果. 先让上面的小盒子向下移动1px,此时就出现了压盖效果.小盒子设置z-index压盖大盒子,将小盒子的下边框去掉, ...

  3. 【C++ Primer | 19】运行类型识别

    运行类型识别 一.使用RTTI dynamic_cast运算符的调用形式如下所示: dynamic_cast<type*>(e) //e是指针 dynamic_cast<type&a ...

  4. S2750&S5700&S6700 V200R003(C00&C02&C10) MIB参考

    https://support.huawei.com/enterprise/docinforeader.action?contentId=DOC1000027337&idPath=791971 ...

  5. css position[转

    2.详细展示 2.1 position:absolute 2.2.1 说明: 绝对定位:脱离文档流的布局,遗留下来的空间由后面的元素填充.定位的起始位置为最近的父元素(postion不为static) ...

  6. Java中九大内置对象

    1.Request对象 该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息,即使用该对象可以获取用户提交的信息.    当Request对象获取客户提交的汉字字符时,会出现乱码问题 ...

  7. 全排列-hdu1027

    题目描述: 题目大意:现在给我们两个数字,N和M.我们应该编程找出由1到N组成的第M个最小序列.主要运用了全排列的思想,运用了全排列中next_permutation()函数: next_permut ...

  8. HDU-2066-一个人的旅行 【Dijkstra】

    <题目链接> 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历, ...

  9. 【*】CAS 是什么,Java8是如何优化 CAS 的

    文章结构 前言 想要读懂 Java 中的并发包,就是要先读懂 CAS 机制,因为 CAS 是并发包的底层实现原理.本文主要讨论  CAS 是如何保证操作的原子性的  Java8 对 CAS 进行了哪些 ...

  10. AJAX请求状态码返回200却跳到error的function

    最近在搞公司的项目时,发现了一个神奇的问题,就是AJAX请求成功,却莫名其妙的不返回到success函数中,而是跳到了error函数中.公司的项目是ASP.NET,这个和用的什么语言没有多大关系,只要 ...