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

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

声明游标

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. Contest 20140708 testB dp 组合数

    testB 输入文件: testB.in  输出文件testB.out 时限3000ms 问题描述: 定义这样一个序列(a1,b1),(a2,b2),…,(ak,bk)如果这个序列是方序列的话必须满足 ...

  2. Codeforces Round #154 (Div. 2) : B

    一个很简单的题: 方法一: 二分. 代码: #include<cstdio> #include<algorithm> #define maxn 100005 using nam ...

  3. New Distinct Substrings

    spoj705:http://www.spoj.com/problems/SUBST1/ 题意:和spoj694一样,只是数据范围变大了. 题解:同spoj694. #include<iostr ...

  4. Qt4.8 移植(超详细Configure的参数)

    Qt4.8.6 configure 参数 不只是适用于Qt4.8.6,原则上适用于Qt4所有版本 Usage: configure [-h] [-prefix <dir>] [-prefi ...

  5. Git fork指令

    ​ork并且更新一个仓库 现在有这样一种情形:有一个叫做Joe的程序猿写了一个游戏程序,而你可能要去改进它.并且Joe将他的代码放在了GitHub仓库上.下面是你要做的事情: fork并且更新GitH ...

  6. 利用rowid更新单表

    SQL> create table test1(id int,name char(10)); Table created. begin for i in 1 .. 1000000 loop in ...

  7. 从 mian 函数开始一步一步分析 nginx 执行流程(三)

    如不做特殊说明,本博客所使用的 nginx 源码版本是 1.0.14,[] 中是代码所在的文件! 这一节我们分析ngx_start_worker_processes(),该函数代码比较少,因为它通过调 ...

  8. DD-WRT相关资源

    版本网站下载:Other Downloads,进入betas->2014 FTP下载:如ftp://ftp.dd-wrt.com/betas/2014/06-23-2014-r24461/ Re ...

  9. Tree2cycle

    Problem Description A tree with N nodes and N-1 edges is given. To connect or disconnect one edge, w ...

  10. HDOJ/HDU 2566 统计硬币(公式~遍历~)

    Problem Description 假设一堆由1分.2分.5分组成的n个硬币总面值为m分,求一共有多少种可能的组合方式(某种面值的硬币可以数量可以为0). Input 输入数据第一行有一个正整数T ...