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

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

声明游标

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. 菜鸟的ubuntu学习笔记

    初识ubuntu感觉这个系统绝对够高大上,简洁的桌面,流畅的操作界面,在加上神秘的终端控制,突然感觉自己的世界真的好渺小,所以我下定决心在接下来的日子里我要告别windows,把ubuntu学好,尝试 ...

  2. 【HDU4552】 怪盗基德的挑战书(后缀数组)

    怪盗基德的挑战书 Problem Description “在树最美丽的那天,当时间老人再次把大钟平均分开时,我会降临在灯火之城的金字塔前,带走那最珍贵的笑容.”这是怪盗基德盗取巴黎卢浮宫的<蒙 ...

  3. Remove highlight from document(Aspose Word 删除高亮)

    Thanks for your inquiry. You can do it using DocumentVisitor. Please try using the following code: / ...

  4. leetcode面试准备:Count Complete Tree Nodes

    1 题目 Given a complete binary tree, count the number of nodes. In a complete binary tree every level, ...

  5. Java实现生产者消费者

    方法1:最简单--利用LinkedBlockingQueue 队列具有先进先出的特点,成为经常应用于生产-消费者模式的数据结构. 1.将一个对象放到队列尾部,如果队列已满,就等待直到有空闲节点. —— ...

  6. [LeetCode#256] Paint House

    Problem: There are a row of n houses, each house can be painted with one of the three colors: red, b ...

  7. View转化为bitmap

    private Bitmap getViewBitmap(View v) { v.clearFocus(); v.setPressed(false); boolean willNotCache = v ...

  8. Hibernate(二)Hibernate 实例

    上篇Hibernate(一)JDBC简介,我们主要对JDBC进行了简单介绍和使用说明,这次我们做一个Hibernate简单实例,通过这个实例对比Hibernate和JDBC,了解Hibernate的优 ...

  9. Java GC专家系列4:Apache的MaxClients设置及其对Tomcat Full GC的影响

    本文是GC专家系列中的第四篇.在第一篇理解Java垃圾回收中我们学习了几种不同的GC算法的处理过程,GC的工作方式,新生代与老年代的区别.所以,你应该已经了解了JDK 7中的5种GC类型,以及每种GC ...

  10. Uber即将进驻扬州啦,车主火热招募中!

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...