`
q272156430
  • 浏览: 269816 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

oracle 显示游标

阅读更多

在oracle9i之前,为了查询处理select语句返回的多行数据,开发人员必须要使用显示游标,在oracle9i开始,开发人员即可以使用显示游标处理多行数据,也可以使用select ...bulk collect into 语句处理多行数据。
一、显示游标
PL/SQL包含隐藏游标和显示游标等两种游标类型,其中隐藏游标用于处理select into和DML语句,而显示游标用于专门处理select语句返回多行数据。
1、使用显示游标
为了处理select语法返回的多行数据,开发人员可以使用显示数据,使用显示数据包括定义游标、打开游标、提取游标、和关闭游标四个阶段:
(1)、定义游标:
   在使用显示游标之前,必须首先在定义部分定义游标,定义游标用于指定游标所对应的select语句,语法如下:
cursor cursor_name is select_statement;
   如上所示,cursor_name用于指定游标的名称,select_statement用于指定游标所对应的select语句,
(2)打开游标:
  当打开游标时,oracle会执行游标所对应的select语句,并且将select语句的结果暂时保持到结果集中,语法如下;
open cursor_name;
该游标名称必须在定义部分定义成游标。
(3)、提出数据
在游标打开之后,select语句返回的结果集临时保持到游标结果集中,为了处理结果集的数据,需要使用fetch语句提取游标数据,在oracle9i之前,使用fetch语句每次只能提取一行数据,从oracle9i开始,通过使用fetch..bulk collect into语句,每次可以提取多行数据,语法如下:
语法一:fetch cursor_name into variable1,variable2,....;
语法二:fetch cursor_name bulk collect into collect1,collect2,..[limit rows];
如上所示:variable用于指定接收游标数据的变量;collect用于指定接收游标结果的集合变量, 注意,当使用语法一时,必须要使用循环语句处理结果集的所有数据。
(4)、关闭游标
在提取并处理结果集的所有数据之后,就可以关闭游标并释放器结果集了,语法如下:
close cursor_name;
2、显示游标属性
   显示游标属性用于返回显示游标的执行信息,这些属性包括%isopen,%found,%notfond和%rowcount,当使用游标时,必须要在显示游标属性之前带有显示游标名作为前缀(游标名属性名)。
(1)、%isopen
   该属性用于确定游标是否打开,如果游标已经打开,则返回值为true,如果游标没有打开,则返回值为false,示例如下: 
   

 if cl%isopen then     ----如果游标打开,则执行相应操作。 
       ...... 
   else                  -----如果游标未打开,则打开游标 
     open cl; 
   end if; 

 

(2)、%found
  该属性用于检查是否从结果集中提取到了数据,如果提取到了数据,则返回值为true,如果未提取到数据,则返回值为false,示例如下: 

loop   
   fetch cl into var1,var2,;  -------提取数据到变量中 
       if cl%found then        -----------如果提取到数据,则进行相应操作 
          ......; 
      else                         ---------如果没有提取到数据,则退出循环 
        exit; 
      end if; 
end loop;

 
(3)、%notfound
   该属性与%found属性恰好相反,如果提到数据,则返回false,如果没有提取到数据,则返回true。示例如下: 

loop 
   fetch cl into var1,var2; 
      if  cl%notfound then 
         。。。。。。。。; 
      else 
        exit; 
      end if; 
end loop;

 
(4)、%rowcount
   该属性用于返回到当前行为止,已经提取到得实际行数,示例如下: 

loop 
    fetch  cl into var1,var2; 
        if cl%rowcount>0 then 
         ...... 
       end if; 
  end loop; 

 
  3、显示游标示例
(1)、在显示游标时使用fetch...into语句
     在oracle9i之前使用fetch..into语句,每次只能处理一行数据,为了处理结果集中的多行数据,必须要使用循环语句进行处理,示例如下:

declare
 cursor cursor_temp IS select name,age,address,id from cip_temps  where id=10;
 v_name cip_temps.name%TYPE;
 v_age cip_temps.age%TYPE;
 v_address cip_temps.address%TYPE;
 v_id cip_temps.id%TYPE;
  
begin
 open cursor_temp;
 loop
   fetch cursor_temp into v_name,v_age,v_address,v_id;
   exit when cursor_temp%notfound;
   dbms_output.put_line(v_name ||':'|| v_age ||':'|| v_address||':'|| v_id);
 end loop; 
 close cursor_temp;
end;

 


(2)、在显示游标中,使用fetch..bulk collect into 语句提取所有数据
  从oracle9i开始,通过使用fetch..bulk collect into 语句,一次就可以提取结果集的所有数据,示例如下:

declare
cursor temp_cursor is select  * from cip_temps where id=1;
type temp_table_type is table of cip_temps%rowtype;
temp_table temp_table_type; 
begin
open temp_cursor;
fetch temp_cursor bulk collect into temp_table;
for i in 1..temp_table.count loop
dbms_output.put_line(temp_table(i).name||':'||temp_table(i).age||':'||temp_table(i).address||':'||temp_table(i).id);
end loop;
close temp_cursor;
end;
 

(3)、在显示游标中,使用fetch..bulk collect into..limit 语句提取部分数据
  当使用fetch..bulk collect into子句提取数据时,默认情况下会提取结果集中的全部数据,如果结果集的数据含有大量数据,并且使用array集合变量接收数据,那么可能需要限制每次提取的行数,示例如下:

declare
 type temp_array_type is array(5) of cip_temps%rowtype;
 temp_array temp_array_type;
 cursor temp_cursor is select * from cip_temps;
 rows int:=5;
 v_count int:=0;
begin
open temp_cursor;
loop
 fetch temp_cursor bulk collect into temp_array limit rows;
 dbms_output.put_line('message:');
 for i in 1..(temp_cursor%rowcount-v_count) loop
   dbms_output.put_line(temp_array(i).name||':'||temp_array(i).age||':'||temp_array(i).address||':'||temp_array(i).id);
 end loop;
 v_count:=temp_cursor%rowcount;
 exit when temp_cursor%notfound;
end loop;
close temp_cursor;
end;

 


(4)、使用游标属性
   为了显示游标的执行信息,需要使用显示游标的属性,下面以显示游标属性%isopen和%rowcount为例:

declare   
type name_table_type is table of  cip_temps.name%type index by binary_integer;   
name_table name_table_type;   
cursor  temp_cursor is select name from cip_temps;   
begin   
 if not temp_cursor%isopen then   
 open temp_cursor;   
 end if;   
 fetch temp_cursor bulk collect into name_table;   
 dbms_output.put_line(temp_cursor%rowcount);   
 close temp_cursor;   
end;  

 

 
分享到:
评论

相关推荐

    oracle 隐式游标,显示游标,游标循环

    游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库...在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。

    Oracle显示游标的使用及游标for循环

    本篇文章给大家介绍oracle显示游标的使用及游标for循环,当查询返回单行记录时使用隐式游标,查询返回多行记录并逐行进行处理时使用显式游标,对本文感兴趣的朋友一起学习吧

    详解Oracle隐式游标和显式游标

    1.Oracle隐式游标 1.1Oracle有常用的哪些隐式游标 1.2 Oracle隐式游标演示 -- 隐式游标 (使用的表为Oracle默认自带的emp表) -- sql%rowcount:影响记录条数 sql%found:是否有满足条件的记录 set serveroutput on...

    快速练习ORACLE游标习题及答案

    关于游标使用问题的练习附答案。游标分隐式和显示游标;动态和ref游标。。。

    oracle游标练习答案

    关于游标使用问题的练习和答案。游标分隐式和显示游标;动态和ref游标。适用于初学者。

    oracle游标学习资料

    主要描述oracle中游标的学习隐式游标和显示游标

    Oracle 游标使用总结

    Oracle游标分为显示游标和隐式游标。 显示游标(Explicit Cursor):在PL/SQL程序中定义的、用于查询的游标称作显示游标。 隐式游标(Implicit Cursor):是指非PL/SQL程序中定义的、而且是在PL/SQL中使用UPDATE/...

    Oracle之显示游标的使用方法.pdf

    Oracle之显示游标的使用方法.pdf 学习资料 复习资料 教学资源

    关于游标的说明与使用方法

    什么是游标?游标有什么作用?Oracle游标的类型?Oracle游标的状态有哪些,怎么使用游标属性?如何使用显示游标,?如何遍历循环游标?

    Oracle面试题

    1. oracle中的游标分为显示游标和隐式游标 2. 显示游标是用cursor...is命令定义的游标,它可以对查询语句(select)返回的多条记录进行处理;隐式游标是在执行插入 (insert)、删除(delete)、修改(update)和返回单条...

    oracle游标管理

    oracle游标管理:显示游标,隐式游标,REF游标

    oracle 游标

    介绍oracle 中使用游标 游标在存储过程中的应用 (输入、输出参数) 例:通过输入部门号,查询某部门员工的姓名和工作。 (用输入参数和输出参数 LOOP循环)

    Oracle存储过程实例使用显示游标

    存储过程调用 Function 并使用 游标循环得到每一条数据然后更新本条数据。初学代码写的不是很好,希望能给初学存储过程的兄弟们提供一点借鉴哦。

    oracle游标

    有关显示游标,隐式游标,动态游标的,如果没基础的话,可以参考这个看看哦

    Oracle中的游标和函数详解

    Oracle中的游标和函数详解 1.游标 游标是一种 PL/SQL 控制结构;可以对 SQL 语句的处理进行显示控制,便于对表的行数据 逐条进行处理。 游标并不是一个数据库对象,只是存留在内存中。 操作步骤:  声明游标  ...

    sql.txt 存储过程行列转置(oracle)

    oracle 存储过程,实现列表数据行转置成列显示table效果;用游标的方式实现;

    Oracle 从入门到精通视频教程(11G版本)(ppt)

    显示游标 隐式游标 第9章-视图,数据库中虚拟的表 什么是视图 视图的创建 操作视图数据的限制 视图的修改 视图的删除 第10章-存储过程,提高程序执行的效率 什么是存储过程 在SQL*Plus中创建存储过程 ...

    PL_SQL模块学习之十、游标

    文章目录游标1.1 显式游标1.1.1 创建游标1.1.2 打开游标...显示游标由用户创建并管理 select * from v$open_cursor查看当前会话游标 详情参考oracle中cursor与refcursor及sys_refcursor的区别 1.1 显式游标 1.1.1 创

    Oracle11g从入门到精通2

    内容简介 《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地介绍了数据库和Oracle...15.6.1 今日新闻的显示 15.6.2 查找新闻 15.6.3 查看新闻人物和投票 15.7 本章小结

Global site tag (gtag.js) - Google Analytics