`
q272156430
  • 浏览: 275784 次
  • 性别: 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 隐式游标,显示游标,游标循环

    游标分为两种主要类型:**隐式游标**和**显示游标**。此外,还可以利用游标进行循环处理,以实现更复杂的数据操作需求。 #### 二、隐式游标 隐式游标是在执行DML(数据操纵语言)操作或单行`SELECT INTO`语句时由...

    oracle数据库游标使用例子

    如果游标已打开,可以显示提示信息并关闭游标;否则,打开游标并执行查询。 7. **使用ROWCOUNT属性**: 示例5中,`%ROWCOUNT`属性被用来检查游标处理的行数。当`FETCH`或`UPDATE`操作完成后,可以通过`%ROWCOUNT`...

    oracle游标的总结oracle游标的总结

    1. 显示游标:显示游标是使用 cursor...is 语句定义的游标。 2. 隐式游标:隐式游标是在执行插入(insert)、删除(delete)、修改(update)和返回单条记录的查询(select)语句时由 PL/SQL 自动定义的。 四、游标...

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

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

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

    Oracle数据库中的游标是处理查询结果集的一种机制,尤其在需要对多行数据进行逐行操作时显得尤为重要。游标分为隐式游标和显式游标,它们各自有不同的应用场景。 1. **隐式游标**:Oracle在每次SQL语句执行时都会...

    oracle游标练习答案

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

    Oracle存储过程游标详解

    静态游标是指结果集已经确实(静态定义)的游标,可以进一步分为隐式游标和显示游标。隐式游标是所有 DML 语句为隐式游标,可以通过隐式游标属性获取 SQL 语句信息。显示游标是用户显示声明的游标,即指定结果集。当...

    Oracle显式游标和隐式游标.doc

    游标 for 循环是显示游标的一种快捷使用方式,它使用 for 循环依次读取结果集中的行数据,当 form 循环开始时,游标自动打开,每循环一次系统自动读取游标当前行的数据,当退出 for 循环时,游标被自动关闭。...

    oracle游标使用大全

    Oracle 游标是PL/SQL编程中不可或缺的一部分,它们允许程序员逐行处理查询结果,而不仅仅是获取单一数据点。在Oracle数据库中,游标主要用于在循环或其他控制结构中操作多行数据,使得处理复杂的数据操作变得更为...

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

    在本例中,“Oracle存储过程实例使用显示游标”着重展示了如何在存储过程中调用函数,并通过游标来处理和更新数据。 首先,我们需要了解存储过程的基本结构。一个存储过程通常包含以下部分: 1. **声明部分**:在...

    Oracle 游标使用总结

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

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

    Oracle 游标是数据库编程中处理查询结果集的重要工具,特别是在PL/SQL环境中。游标允许程序员逐行处理数据,而不是一次性加载整个结果集。在Oracle中,游标分为隐式游标和显式游标。本文主要关注的是显式游标,其...

    Oracle数据库的游标学习总结

    Oracle游标主要分为两大类:显示游标和隐式游标。其中,显示游标又可以根据定义方式的不同细分为静态游标和动态游标。 ##### 显示游标 显示游标主要用于处理SELECT语句的结果集。当定义游标时,需要明确指定SQL...

    oracle 游标

    Oracle 游标是一种数据库编程工具,它允许程序员逐行处理查询结果集,而不仅仅是一次性获取所有数据。在Oracle中,游标尤其适用于处理大量数据,或者需要根据当前数据行进行决策的情况。游标通常与存储过程结合使用...

    oracle游标管理

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

    oracle游标的使用

    Oracle游标是数据库管理系统中非常重要的一个概念,它在处理大量数据时提供了高效且灵活的控制方式。在Oracle中,游标(Cursor)允许我们逐行处理查询结果集,而不是一次性加载所有数据,这对于处理复杂的数据操作...

    oracle游标溢出调优

    Oracle游标溢出调优是数据库性能优化的重要环节,尤其对于处理大量并发查询或复杂业务逻辑的应用来说。游标管理是Oracle数据库管理SQL语句的关键部分,它涉及到内存分配、缓存策略以及解析效率。以下将详细介绍游标...

Global site tag (gtag.js) - Google Analytics