`

数据库游标(Oracle)

阅读更多

游标的概念

游标是SQL的一个内存工作区,由系统或用户以变量形式定义。

游标的作用是用于临时存储从数据库中提取的数据块。

为什么要用游标?数据库的数据是存放在磁盘中的,游标是把数据从磁盘中调到计算机内存中进行处理,最后将处理结果显示出来或者最终写回数据库,这样可以提高数据处理的效率,因为频繁的磁盘数据交换会降低效率。

游标有两种类型:隐式游标显示游标

隐式游标:对于SELECT...INTO...语句(一次只能从数据库中提取一行记录)和DML(数据操纵语言,也就是INSERT语句、UPDATE语句和DELETE语句),系统都会采用隐式游标。

显示游标:对于结果集多于1条记录的SELECT语句,需要程序员自己定义一个显示游标。

隐式游标

隐式游标的四个属性

%FOUNT 值true代表单行查询语句或DML语句操作成功
%NOTFOUNT 与%Found相反
%ISOPEN DML执行中为true,执行结束后为false
%ROWCOUNT 代表DML语句成功执行的数据行数

使用隐游标的一个例子:

SET SERVEROUTPUT ON   
        BEGIN  
        UPDATE emp SET sal=sal+100 WHERE empno=1234;  
        IF SQL%FOUND THEN   
        DBMS_OUTPUT.PUT_LINE('成功修改雇员工资!');  
        COMMIT;   
        ELSE  
        DBMS_OUTPUT.PUT_LINE('修改雇员工资失败!');  
        END IF;   
        END;  

显示游标

显示游标的四个属性

%FOUNT 最近的FETCH语句返回一行记录则true,否则为false
%NOTFOUNT 与%Found相反
%ISOPEN 游标打开时为true,否则为false
%ROWCOUNT 获取FETCH语句返回的行数

显示游标的使用分以下4个步骤:

  1. 声明游标
  2. 打开游标
  3. 提取数据
  4. 关闭游标

声明游标

CURSOR 游标名[(参数1 数据类型[,参数2 数据类型...])] IS SELECT语句;

参数是可选部分

打开游标

OPEN 游标名[(实际参数1[,实际参数2...])];

参数是可选部分,打开游标时,结果集就被送到的游标工作区

提取数据

FETCH 游标名 INTO 变量名1[,变量名2...];


FETCH 游标名 INTO 记录变量;

游标打开后有一个指针指向数据区,FETCH语句一次返回指针所指的一行数据,要返回多行需重复执行,可以使用循环语句来实现。控制循环可以通过判断游标的属性来进行。

第一种FETCH格式:变量名是用来从游标中接收数据的变量,需要事先定义。变量的个数和类型应与SELECT语句中的字段变量的个数和类型一致。

第二种FETCH格式:一次将一行数据提取到记录变量中,需要使用%ROWTYPE事先定义记录变量,这种形式使用起来比较方便,不必分别定义和使用多个变量。定义记录变量的方法:变量名 表名|游标名%ROWTYPE; 其中的表必须存在,游标名也必须先定义。

关闭游标

CLOSE 游标名;

显式游标打开后,必须显式地关闭。游标一旦关闭,游标占用的资源就被释放,游标变成无效,必须重新打开才能使用。

下面是几个关于怎么使用显示游标的例子:

【例子1】用游标提取emp表中7788雇员的名称和职务(第一种FETCH)

SET SERVEROUTPUT ON  
    DECLARE   
        v_ename VARCHAR2(10);  
        v_job VARCHAR2(10);  
        CURSOR emp_cursor IS
            SELECT ename,job FROM emp WHERE empno=7788;  
    BEGIN  
        OPEN emp_cursor;  
        FETCH emp_cursor INTO v_ename,v_job;  
        DBMS_OUTPUT.PUT_LINE(v_ename||','||v_job);  
        CLOSE emp_cursor;  
    END;


【例子2】用游标提取emp表中7788雇员的姓名、职务和工资(第二种FETCH)
SET SERVEROUTPUT ON  
    DECLARE  
        CURSOR emp_cursor IS
            SELECT ename,job,sal FROM emp WHERE empno=7788;  
    emp_record emp_cursor%ROWTYPE;  
  BEGIN  
        OPEN emp_cursor;      
    FETCH emp_cursor INTO emp_record;  
    DBMS_OUTPUT.PUT_LINE(emp_record.ename||','|| emp_record.job||','|| emp_record.sal);  
    CLOSE emp_cursor;  
  END; 


【例子3】用游标提取种类是1的所有书的标题(LOOP)

DECLARE
    CURSOR BOOKS_CURSOR IS
        SELECT TITLE FROM BOOKS WHERE CATEGORY_ID = 1;
    V_TITLE     BOOKS.TITLE%TYPE;
    V_ONE_BOOK  BOOKS%ROWTYPE;
BEGIN
    OPEN BOOKS_CURSOR;
    LOOP
        FETCH BOOKS_CURSOR INTO V_TITLE;
        EXIT WHEN BOOKS_CURSOR%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(BOOKS_CURSOR%ROWCOUNT || '. ' || V_TITLE);
    END LOOP;
    CLOSE BOOKS_CURSOR;
END;


【例子4】用游标提取种类是1的所有书的标题(FOR)

DECLARE
    CURSOR BOOKS_CURSOR IS
        SELECT TITLE FROM BOOKS WHERE CATEGORY_ID = 1;
    V_ONE_BOOK  BOOKS%ROWTYPE;
    V_COUNT     NUMBER(2) := 0;
BEGIN
    FOR V_ONE_BOOK IN BOOKS_CURSOR LOOP
        V_COUNT := V_COUNT + 1;
        DBMS_OUTPUT.PUT_LINE(V_COUNT || '. ' || V_ONE_BOOK.TITLE);
    END LOOP;
END;


分享到:
评论

相关推荐

    Oracle 数据库游标使用大全

    Oracle数据库游标是数据库管理系统中用于处理查询结果的一种机制,它允许程序逐行处理查询结果,而不是一次性加载所有数据。在Oracle中,游标对于实现复杂的数据操作和控制流程至关重要,特别是在存储过程和触发器中...

    oracle数据库游标使用例子

    Oracle数据库中的游标是PL/SQL编程中一种重要的控制结构,它允许程序逐行处理查询结果,而不是一次性处理所有结果。游标对于处理大量数据或需要根据每行数据执行不同操作的情况非常有用。以下是关于Oracle游标使用的...

    oracle数据库游标实验报告

    oracle数据库游标实验报告!oracle数据库游标实验报告!oracle数据库游标实验报告!

    快速掌握Oracle数据库游标的使用方法

    Oracle 数据库游标的使用方法 Oracle 数据库游标是指在查询返回结果超过一行时,需要使用的显式游标。用户不能使用 select into 语句,而是需要使用游标来处理多行查询结果。在 PL/SQL 中,隐式游标会在查询开始时...

    oracle数据库的游标

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

    Oracle数据库游标使用.rar

    Oracle数据库游标是数据库编程中的一个重要概念,尤其在处理大量数据时,它们提供了一种有效且灵活的方法。游标允许程序逐行访问查询结果集,而不是一次性加载所有数据。这在处理复杂的数据操作,如循环处理、条件...

    数据库游标练习

    数据库游标是数据库管理系统中的一个重要概念,主要用于处理和操作数据集。在Oracle数据库中,游标扮演着不可或缺的角色,尤其在进行复杂的SQL操作和程序逻辑控制时。本小练习主要目的是帮助你理解和掌握如何在...

    Oracle数据库游标使用大全

    Oracle数据库游标是PL/SQL编程中不可或缺的一部分,它们允许程序逐行处理查询结果,提供了更灵活的数据操作方式。在Oracle数据库中,游标主要分为两种类型:隐式游标和显式游标。 1. **隐式游标**: - 当在PL/SQL...

    Oracle数据库游标使用大全.doc

    Oracle数据库游标使用大全

    Oracle数据库的游标学习总结

    ### Oracle数据库的游标学习总结 #### 一、引言 在Oracle数据库中,游标是一种重要的机制,用于处理查询结果集。通过游标,我们可以逐行地读取查询结果,这对于复杂的业务逻辑处理非常有用。本文将详细介绍Oracle...

    数据库游标使用详细介绍

    ### 数据库游标使用详解:Oracle数据库视角 在数据库领域,游标(Cursor)是一种用于处理数据查询结果集的强大工具,尤其在Oracle数据库中,游标的应用极为广泛且功能强大。本文将深入探讨Oracle数据库中游标的基本...

    Oracle12c数据库基础教程Oracle12c数据库游标、存储过程和触发器.pptx

    Oracle 12c 数据库基础教程 - 游标、存储过程和触发器 Oracle 12c 数据库基础教程中,游标、存储过程和触发器是三个重要的概念。本文将详细介绍游标的基本概念、类型、声明、打开、读取和关闭,存储过程的定义和...

    oracle数据库 游标、存储过程和触发器.ppt

    Oracle 数据库游标、存储过程和触发器 Oracle 数据库是一种关系型数据库管理系统,它提供了多种机制来提高数据库的性能和安全性。在本文中,我们将讨论 Oracle 数据库中的三个重要概念:游标、存储过程和触发器。 ...

    Oracle数据库游标连接超出解决方案

    oracle数据库忽然连不上了,一查是游标数量超了。 1.查看游标数 show parameter open_cursors 2.修改游标数 alter system set open_cursors = 10000; 3.获取打开的游标数 select o.sid, osuser, machine, count...

    使用游标更新数据库

    使用游标更新数据库 使用游标更新数据库是指在游标定位下,修改或删除表中指定的数据行。使用游标对数据进行更新可以提高数据库的性能和效率。 1. 游标更新的基本概念 游标是数据库中的一种数据结构,它可以用来...

    Oracle 游标 Oracle 游标

    在Oracle数据库中,游标(Cursor)是处理数据集的一个关键机制,主要用于执行查询并逐行处理结果集。游标可以被视为一个临时存储区,用于保存SELECT语句的结果集,允许程序对这些结果进行迭代访问。 #### 游标的...

    Oracle数据库添加 更新 游标 过程 Java Project

    在这个Java项目中,我们将探讨如何在Oracle数据库中添加、更新数据,并利用游标处理过程,这些都是数据库操作的重要组成部分。 首先,让我们详细了解一下Oracle数据库的“添加”操作。在Oracle中,我们通常使用SQL...

Global site tag (gtag.js) - Google Analytics