显式游标的处理过程包括:

声明游标,打开游标,检索游标,关闭游标。

声明游标

CURSOR c_cursor_name IS statement;

游标相当于一个查询结果集,将查询的结果放在游标里,方便在块里进行处理。

记录

一个记录就是一个复合的数据结构,相当于结果集里的一行数据,用于遍历游标时存放结果。记录支持三种定义:基于表,基于游标,自定义。

如果是基于表或游标,其定义格式为:

record_name table_name or cursor_name%ROWTYPE;

打开游标

OPEN cursor_name;

检索游标

存在两种游标检索方式:

FETCH cursor_name INTO pl/sql variables;

or

FETCH cursor_name INTO pl/sql record;

当游标被检索时,在每个FETCH语句之后,活跃数据集指针继续迁移到下一个数据行。因此,FETCH会返回活跃数据集中连续的数据行,直到获取整个数据集。最后一个FETCH语句不会给输出变量赋值,后者仍旧保存原来的值。

那么在游标检索到最后,如何停止检索呢?

这时就要用到游标的属性了。

游标属性包括:

%NOTFOUND 当前的FETCH操作没有返回数据行时,为true,否则为false;

%FOUND       与上述相反;

%ROWCOUNT 返回游标的记录数量;

%ISOPEN     检测游标是否打开;

关闭游标

CLOSE cursor_name;

以下是一个示例:

 declare
cursor c_zip is
select * from zipcode;--声明游标
vr_zip c_zip%rowtype;--声明记录,结构基于游标
begin
open c_zip;--打开游标
loop
fetch c_zip into vr_zip;--循环,检索游标
exit when c_zip%NOTFOUND;--利用属性,当前一FETCH操作没有返回数据,exit
dbms_output.putline(vr_zip.zip || ' ' || vr_zip.city || ' ' || vr_zip.state);
end loop;
close c_zip;--关闭游标
end;

简便的办法:使用游标 FOR循环

借助于游标FOR循环,游标打开,检索和关闭的过程都被隐含地实现。这使得代码块更容易编写与维护。

使用方法其实与C#中的foreach相似,自动遍历。

以下是上面示例的for循环写法:

 declare
cursor c_zip is
select * from zipcode;--声明游标
begin
for r_zip in c_zip--不必声明记录
loop
dbms_output.putline(vr_zip.zip || ' ' || vr_zip.city || ' ' || vr_zip.state);
end loop;--不必考虑何时退出
end;

传入参数

如果要传入参数,在游标名后面加上类似函数的参数列表之类的东西,在检索游标时相当于调用(即FETCH INTO语句),在游标名后面传入实际参数。

下面是一个示例:

 declare
cursor c_zip(p_state in zipcode.state%type) is --传入参数
select zip, city, state
from zipcode
where state = p_state;
v_state zipcode.state%type := &a;
begin
for r_zip in c_zip(v_state)--调用时传入实际参数
loop
dbms_output.put_line(r_zip.zip || ', ' || r_zip.city || ', ' || r_zip.state);
end loop;
exception
when no_data_found then dbms_output.put_line('no data found');
end;

七夕节快乐!大家要做好安全措施哦~~

plsql 显式游标的更多相关文章

  1. 【PL/SQL练习】显式游标

    cursor --------需要用户先定义,在select时,可以用于处理多行记录 1.declare  声明一个游标 2.open cursor (隐式游标自动open) 3.fetch curs ...

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

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

  3. ORACLE的显式游标与隐式游标

    1)查询返回单行记录时→隐式游标: 2)查询返回多行记录并逐行进行处理时→显式游标 显式游标例子: DECLARE CURSOR CUR_EMP IS SELECT * FROM EMP; ROW_E ...

  4. PL/SQL — 显式游标

    一.游标的相关概念及特性 1.定义 通过游标方式定位到结果集中某个特定的行,然后根据业务需求对该行进行相应特定的操作. 2.分类 显示游标: 用户自定义游标,用于处理select语句返回的多行数据. ...

  5. Oracle PLSQL Demo - 08.定义显式游标[Define CURSOR, Open, Fetch, Close CURSOR]

    declare v_empno scott.emp.empno%type; v_sal scott.emp.sal%type; cursor cur_emp is select t.empno, t. ...

  6. oracle 使用显式的游标(CURSORs)

    使用隐式的游标,将会执行两次操作. 第一次检索记录, 第二次检查TOO MANY ROWS 这个exception . 而显式游标不执行第二次操作.

  7. Oracle游标cursor1基础和隐式游标

    --指向表行的指针,一次一行,一般向前移动 Resultset --游标永远代代表的是一行数据. /* 使用步骤 第一步:声明游标,就像是声明一个变量样. 游标的关键字就是cursor. Declar ...

  8. PLSQL 几种游标的用法

    分类: Oracle 1. PL/SQL里的游标可以分为显式和隐式两种,而隐式有分为select into隐式游标和for .. in 隐式游标两种.所以,我们可以认为,有3种游标用法: A. 显式游 ...

  9. oracle的隐式游标

    游标的概念:     游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理, ...

随机推荐

  1. 共享式以太网与交换式以太网的性能比较(OPNET网络仿真实验)

      一.实验目的 比较共享式以太网和交换式以太网在不同网络规模下的性能. 二.实验方法 使用opnet来创建和模拟网络拓扑,并运行分析其性能. 三.实验内容 3.1   实验设置(网络拓扑.参数设置. ...

  2. 如何使用 Java 构建微服务?

    [编者按]微服务背后的大理念是将大型.复杂且历时长久的应用在架构上设计为内聚的服务,这些服务能够随着时间的流逝而演化.本文主要介绍了利用 Java 生态系统构建微服务的多种方法,并分析了每种方法的利弊 ...

  3. LED七彩变色灯的制作

    LED变色灯是一种新型灯泡.它的外形与一般乳白色白炽灯泡相同,但点亮后会自动按一定的时间间隔变色.循环地发出青.黄.绿.紫.蓝.红.白色光.它适用于家庭生日派对.节日聚会.过节过年,给节日添加欢乐气氛 ...

  4. SpringMVC+Json构建基于Restful风格的应用(转)

    一.spring 版本:spring-framework-3.2.7.RELEASE 二.所需其它Jar包: 三.主要代码: web.xml <?xml version="1.0&qu ...

  5. IN改写关联注意事项!

    SQL> select * from a1; ID NAME ---------- ---------- 1 a 2 a SQL> select * from a2; ID NAME -- ...

  6. 数据结构(并查集||树链剖分):HEOI 2016 tree

    [注意事项] 为了体现增强版,题目限制和数据范围有所增强: 时间限制:1.5s 内存限制:128MB 对于15% 的数据,1<=N,Q<=1000. 对于35% 的数据,1<=N,Q ...

  7. 数据结构(平衡树,树分治,暴力重构):WC 2014 紫荆花之恋

    [题目描述] 强强和萌萌是一对好朋友.有一天他们在外面闲逛,突然看到前方有一棵紫荆树.这已经是紫荆花飞舞的季节了,无数的花瓣以肉眼可见的速度从紫荆树上长了出来. 仔细看看的话,这棵大树实际上是一个带权 ...

  8. Jacob - Outlook

    import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; public class Util { public ...

  9. Linux学习笔记25——命名管道(FIFO)

    1 命名管道(FIFO) 管道应用的一个重大缺陷就是没有名字,因此只能用于亲缘进程之间的通信.后来从管道为基础提出命名管道(named pipe,FIFO)的概念,该限制得到了克服.FIFO不同于管道 ...

  10. HDOJ/HDU 2710 Max Factor(素数快速筛选~)

    Problem Description To improve the organization of his farm, Farmer John labels each of his N (1 < ...