`
tjmzgn
  • 浏览: 161708 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

游标(一)

阅读更多
使用游标
当在pl/sql块中执行查询语句(select)和数据操纵语句时,Oracle会为其分配上下文区,游标是指向上下文区的指针。
pl/sql包含隐含游标和显示游标等两种游标类型,其中隐含游标用于处理select into和DML语句,而显示游标专门用于处理select
语句返回的多行数据。
1.使用显示游标
显示游标包括定义游标、打开游标、提取数据和关闭游标四个阶段
             declare    open     fetch     close
(1) 定义游标
语法如下:  CURSOR cursor_name IS select_statement;
cursor_name 用于指定的游标名称。
select_statement 用于指定游标所对应的select语句。
(2) 打开游标---当打开游标时,Oracle会执行游标所对应的select语句,并且将select语句的结果暂时存放在结果集中。
    语法如下:   OPEN cursor_name;      游标名必须是在定义部分已经被定义的游标。
(3) 提取数据---使用fetch语句提取游标数据
    2种方式: 语法一 FETCH cursor_name INTO variable1,variable2,......;
    语法二 FETCH cursor_name BULK COLLECT INTO collect1,collect2,.........
    variable1 用于指定接收游标数据的变量,collect用于指定接收游标结果的集合变量。注意当使用
    语法一时,必须要使用循环语句处理结果集的所有数据。
(4) 关闭游标---在提取并处理了结果集的所有数据之后,就可以关闭游标并释放其结果集了。
语法如下: CLOSE cursor_name;
2.显示游标属性---用于返回显式游标的执行信息
  语法: 游标名+游标属性  c1%ISOPEN
  (1) %ISOPEN   用于判断游标是否打开。
  (2) %FOUND    该属性用于检查是否从结果集中提取到了数据。
      eg: LOOP
      FETCH c1 INTO var1,var2;
      IF c1%FOUND THEN
      .......
        ELSE
        EXIT;
        END IF
      END LOOP;
(3) %NOTFOUND
(4) %ROWCOUNT ---用于返回到当前行为止已经提取到的实际行数。
     LOOP
     FETCH c1 INTO my_ename,my_deptno;
      IF c1%ROWCOUNT >10 then
      .......
      END IF;
     
     END LOOP;
===========================================================================================
列出部门编号是10的员工姓名。
declare
  CURSOR c1 IS select ename from emp where emp.deptno=10;
  var_ename varchar2(50);
begin
  open c1;
  Loop
       FETCH c1 INTO var_ename;
       EXIT WHEN c1%NOTFOUND;
       dbms_output.put_line(var_ename);
  end loop;
end;
用 fetch  bulk collect into 的写法;

declare
  CURSOR ename_cursor IS select ename from emp where emp.deptno=10;
  TYPE ename_table_type IS TABLE OF varchar(50)『此处不能用%type』;
  ename_type ename_table_type;
begin
  open ename_cursor;
  fetch ename_cursor bulk collect into ename_type;
  for i in 1..ename_type.count LOOP
     dbms_output.put_line(ename_type(i));
  END LOOP;
  CLOSE ename_cursor;
end;
============================================================================================================================
当使用fetch...bulk collect into 语句提取数据时,默认情况下会提取结果集的所有数据.如果结果集
含有大量数据,并且使用varray集合变量接收数据,那么可能需要限制每次提取的行数。
下面以每次提取5行数据为例,说明使用limit子句限制提取行的方法:
declare
type name_array_type is varray(5) of varchar2(10);
name_array name_array_type;
CURSOR emp_cursor IS select ename from emp;
rows int:=5;
v_count int:=0;
begin
open emp_cursor;
loop
   fetch emp_cursor bulk collect into name_array limit rows;
   dbms_output.put_line('emp_cursor%rowcount='|| emp_cursor%rowcount);
   dbms_output.put_line('v_count='|| v_count);
   dbms_output.put_line('雇员名:');
   for i in 1..(emp_cursor%rowcount-v_count) Loop
       dbms_output.put_line(name_array(i)||'  ');
   end Loop;
   dbms_output.new_line;
   v_count:=emp_cursor%rowcount;
   exit when emp_cursor%notfound;
end loop;
close emp_cursor;
end;


       
分享到:
评论

相关推荐

    .Net Oracle一次请求执行多条sql语句 Oracle批处理 使用游标一次执行多条Sql语句

    Oracle 一次请求执行多条sql语句 在.net 中查询Sql Server 一次请求执行多条sql语句很...例子中提供了2种解决方案 一种是用游标 还有一种就是很简单的拼接字符串的方法 语法略微和sql server有些区别 适合新手学习

    利用游标多数据库查询单条数据方法

    在SQL编程中,游标(Cursor)是一种非常重要的工具,特别是在处理多数据库查询时,它允许我们逐行处理结果集,而不是一次性加载所有数据。在标题"利用游标多数据库查询单条数据方法"中提到的场景,游标被用于在10多...

    游标例题 获取游标中的某一行

    游标在数据库编程中扮演着重要角色,它们允许程序员逐行处理查询结果,而不仅仅是一次性获取所有数据。在数据库管理系统(如Oracle、SQL Server、MySQL等)中,游标是实现交互式数据处理的关键工具。下面我们将深入...

    LabVIEW 的游标图例

    游标图例用来显示图形中的游标,如图1所示。在图形上用游标可读取绘图区域上某个点的确切值,游...右键单击单曲线游标图例,从弹出的快捷菜单中选择“关联至”,可将游标与一个或所有曲线实现关联。多曲线模式将游标

    波形图游标功能_获取游标_

    波形图游标功能在许多科学计算和数据分析应用中都是一种非常重要的工具,它允许用户在可视化图形上精确地定位和测量数据点。在LabVIEW(Laboratory Virtual Instrument Engineering Workbench)这样的图形化编程环境...

    Mysql游标(循环操作)

    #### 一、游标简介 在MySQL中,游标是一种数据库对象,主要用于处理存储过程中的结果集。游标允许我们逐行地读取查询结果,这对于需要对每一行数据执行特定操作的情况非常有用。通过使用游标,我们可以实现更加灵活...

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

    在Oracle数据库中,游标是一种非常重要的机制,它允许用户在程序中对查询结果进行逐行处理。游标分为两种主要类型:**隐式游标**和**显示游标**。此外,还可以利用游标进行循环处理,以实现更复杂的数据操作需求。 ...

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

    #### 一、什么是游标? 在数据库技术中,**游标**是一种用于检索查询结果集中的数据的方式。它允许用户逐行处理记录集,而不是一次处理整个记录集。这使得游标成为处理大量数据时的一个非常有用的功能。 #### 二、...

    使用游标更新数据库

    在上面的示例代码中,我们首先声明了一个名为 emp_cursor 的游标,该游标从 emp 表中选择所有列,并使用 FOR UPDATE 选项锁定了 sal 列。在循环体中,我们使用 WHERE CURRENT OF 子句来更新当前行对应的数据行。 7....

    游标和异常处理 游标和异常处理

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

    SQL游标使用金典

    #### 一、游标概述 在深入探讨SQL游标的使用之前,我们先来了解一下什么是游标。游标是数据库管理系统的功能之一,它允许用户逐行处理查询结果集中的数据。通常情况下,当我们执行一个SELECT语句时,整个结果集会被...

    ORACLE 游标使用示例

    在Oracle数据库中,游标(Cursor)是一种非常重要的编程工具,尤其在处理复杂的数据操作时。游标允许我们逐行处理查询结果,这对于迭代、条件判断或者数据更新等任务非常实用。下面,我们将深入探讨Oracle游标的使用...

    oracle数据库的游标

    游标是Oracle数据库中一个重要的概念,它是一种在内存中用于存储SQL查询结果的临时工作区域。使用游标可以方便地访问查询结果集中的每一行,这对于处理大量数据是非常有用的。游标主要分为两种类型:显式游标和隐式...

    游标最简单教程

    1. **声明游标**:定义一个游标并关联到一个查询。 2. **打开游标**:使游标准备好读取数据。 3. **从游标中获取数据**:通常使用`FETCH`命令来获取当前行的数据。 4. **循环处理数据**:使用循环结构来依次处理每一...

    游标卡尺SolidWorks图纸

    游标卡尺是一种精密的测量工具,常用于工程和制造业中进行尺寸的精确测量。在三维建模领域,使用SolidWorks这样的专业软件可以创建出游标卡尺的虚拟模型,以便于设计、模拟和分析其结构与功能。SolidWorks 2016是一...

    SQL Server 游标的简单使用

    SQL语句通常都可产生或处理一组记录,但是许多应用程序,尤其是T-SQL嵌入的主语言,通常不能把整个结果集作为一个单元来处理,这些应用程序就需要用一种机制来保证每次处理结果集中的一行或几行,游标(cursor)就提供...

    游标卡尺的使用.ppt

    游标卡尺是一种常用的测量工具,广泛应用于机械制造、工程设计、建筑施工等领域。下面我们将详细介绍游标卡尺的构造、使用规则、分类、测量原理和读数方法。 一、游标卡尺的构造 游标卡尺由四个部分组成:主尺、...

    labview中波形图的游标坐标

    游标是LabVIEW波形图的一个重要功能,它可以帮助用户精确地读取图形上的数据点坐标,进而进行数据分析或调试工作。本篇将详细解释如何在LabVIEW中操作波形图的游标以及实时显示坐标值。 1. **波形图的创建与数据...

    mysql游标实现到了最后一个结束之后结束循环

    MySQL游标是数据库管理系统中用于遍历查询结果集的一种机制,尤其在处理大量数据或进行迭代操作时,游标显得尤为重要。这篇博文可能是探讨如何在MySQL中使用游标,特别是当游标执行到最后一行后如何正确地结束循环。...

Global site tag (gtag.js) - Google Analytics