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

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

声明游标

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. BZOJ 3083 遥远的国度 树链剖分

    3083: 遥远的国度 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 797  Solved: 181[Submit][Status] Descrip ...

  2. BZOJ 4052 Magical GCD

    Description 给出一个长度在\(100000\)以内的正整数序列,大小不超过\(10^{12}\).求一个连续子序列,使得在所有的连续子序列中,它们的GCD值乘以它们的长度最大. Input ...

  3. android和struts2实现android文件上传

    1.开发准备如下2个工具类 package org.lxh.util; import java.io.BufferedReader; import java.io.InputStreamReader; ...

  4. Spring messageSource

    Spring中可以使用两个类加载资源文件: org.springframework.context.support.ReloadableResourceBundleMessageSource 和 or ...

  5. 2.5.1 使用alertDialog

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout ...

  6. 14.6.3.2 Configuring Multiple Buffer Pool Instances 配置多个Buffer Poll 实例:

    14.6.3.2 Configuring Multiple Buffer Pool Instances 配置多个Buffer Poll 实例: 对于系统有多个buffer pools 在多个字节范围, ...

  7. 正在执行的SQL和之前执行的SQL

    SQL> select * from v$mystat where rownum<2; SID STATISTIC# VALUE ---------- ---------- ------- ...

  8. 【CF】244C Checkposts

    题目需要求啥很明确了.主要思想是先计算机联通块,然后每个块内找到一个最小值(以及该值的次数).最小值和结果1,次数乘积为结果2.联通块tarjan可解. /* 427C */ #include < ...

  9. bzoj1306

    非常好的一道搜索题首先没有别的好办法就只能搜,基于对称性我只要搜对角线上半部分即可然后有些惯用的剪枝啦什么的,具体见程序然后代码很短,然后TLE了(但好像也有人过了)然后就不知道怎么优化了,看到CLJ ...

  10. 【转】Xcode7真机调试iOS应用程序

    原文网址:http://i.cnblogs.com/EditPosts.aspx?opt=1 近日苹果发布的新的Xcode7带来了许多特性,比如:swift语言比以前运行更快.功能更强.代码具有更高的 ...