一:游标

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 全栈开发,Day128(创建二维码,扫码,创建玩具的基本属性)

    昨日内容回顾 1.app播放音乐 plus.audio.createPlayer(文件路径/URL) player.play() 播放音乐 player.pause() 暂停播放 player.res ...

  2. 【C++ Primer 第7章】定义抽象数据类型

    参考资料 1. C++Primer #7 类 Sales_data类 Sales_data.h #include<iostream> #include<string> clas ...

  3. POJ 2184 Cow Exhibition (带负值的01背包)

    题意:给你N(N<=100)只牛,每只牛有一个智慧值Si和一个活泼值Fi,现在要从中找出一些来,使得这些牛智慧值总和S与活泼值总和F之和最大,且F和S均为正.Si和Fi范围在-1000到1000 ...

  4. Spring3.X jdk8 java.lang.IllegalArgumentException

    异常提示: javax.servlet.ServletException: Servlet.init() for servlet springMVC threw exception org.apach ...

  5. 解决html5中video标签无法播放mp4问题的办法

    这篇文章主要给大家介绍了关于解决html5中video标签无法播放mp4问题的办法,文中介绍的非常详细,相信会对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧. 最近发现了一个 ...

  6. python小工具myqr生成动态二维码

    python小工具myqr生成动态二维码 (一)安装 (二)使用 (一)安装 命令: pip install myqr 安装完成后,就可以在命令行中输入 myqr 查看下使用帮助: myqr --he ...

  7. Django 学习第一天——django 基本介绍和环境搭建

    web 应用设计模式(MTV MVC): MTV: M:models 模型:负责业务数据对象与数据库对象: T:templates 模板:负责如何把数据展示给用户: V:views 视图:负责业务逻辑 ...

  8. linux下构建MysqlCluster集群,NDB搜索引擎

    搭建管理节点 Ndb搜索引擎对于服务器的内存要求比较高,因为所有数据节点的数据,以及索引,事务等等都需要加载进内存中. 下载 mysql-cluster-gpl-7.6.8-linux-glibc2. ...

  9. [Web安全] XXE漏洞攻防学习(上)

    0x00.XXE漏洞 XXE漏洞全称XML External Entity Injection 即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶 ...

  10. BZOJ.2756.[SCOI2012]奇怪的游戏(二分 黑白染色 最大流ISAP)

    题目链接 \(Description\) \(Solution\) 这种题当然要黑白染色.. 两种颜色的格子数可能相同,也可能差1.记\(n1/n2\)为黑/白格子数,\(s1/s2\)为黑/白格子权 ...