`
hanlu0221
  • 浏览: 13999 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

PL/SQL4之——游标(cursor)

阅读更多
游标(cursor)简单来说,就是指向结果集的指针。

在PL/SQL中,一条select语句只能返回一条记录,但是通过cursor就能完成取出多条记录的任务了。

先看一个简单的小例子:
declare 
      cursor c is 
              select * from emp; 
       v_emp  c%rowtype; 
begin 
     open c; 
     fetch c into v_emp; 
     dbms_output.put_line(v_emp.ename); 
     close c; 
end; 



 
其中有几点需要注意:
1.要在一个结果集上声明一个游标,如上,在“emp表”的查询结果集上声明了游标c;
2.“c%rowtype”相当于“v_emp”中可以存放一条结果集的记录;
3.用于游标需要“open”和“close”两个操作;
4.“fetch...into...”表示取出的结果存入。。。


那如何让我们取出多条记录呢?就可以通过“简单循环”与“游标”的结合来完成了。
继续优化上面的小例子:
declare 
       cursor c is 
               select * from emp; 
       v_emp  c%rowtype; 
egin 
     open c; 
      loop 
     
     fetch c into v_emp; 
     exit when(c%notfound); 
     dbms_output.put_line(v_emp.ename); 
    
     end loop; 
     close c; 
end; 



这里说一下游标的几个属性:
1.isopen:  即游标是否打开,很少用;
2.notfound:即最近的一个fetch语句没有返回记录;
3.found:   即fetch到记录了;
4.rowcount:即当前已经fetch到了多少条记录。


还有一个需要注意的
其中的第10句和第11句不可以调换位置,因为当最后一次执行fetch语句的时候,没有返回记录,就去执行“dbms_output.put_line()”,则会再打印一遍上次fetch的结果。

再来2个小例子巩固一下:
declare 
    cursor c is 
            select * from emp; 
    v_emp  emp%rowtype; 
begin 
   open c;   
   fetch c into v_emp; 
   while(c%found) loop 
      dbms_output.put_line(v_emp.ename); 
      fecth c into v_emp; 
   end loop; 
   close c; 
end; 


其中,如果把第9句和第10句调换位置,则会出现第一句没打印,最后一句打印两边的现象。
declare 
     cursor c is 
            select * from emp; 
begin 
   for v_emp in c loop 
      dbms_output.put_line(v_emp.ename); 
   end loop; 
end; 


这里的for循环,自动提供了一些操作,所以,
1.不需要声明v_emp;
2.不需要“open”和“close”游标;
3.不需要手动“fetch”。


综上,for循环语句简单,且不容易出错,所以经常被使用。


带参数的游标,这里的游标类似函数
例子:

declare 
   cursor c(v_deptno emp.deptno%type, v_job emp.job%type) 
   is 
      select ename, sal from emp where deptno = v_deptno and job = v_job; 
begin 
   for v_temp in c(30, "clerk") loop 
      dbms_output.put_line(v_temp.ename); 
   end loop; 
end; 



可更新的游标
大多数游标是用来“只读”的,但也有一种游标是用来做“更新”的。
例子:

declare 
   cursor c   
   is 
      select * from emp for update; 
begin 
   for v_temp in c loop 
      if(v_temp.sal < 2000)then
         update emp set sal = sal * 2 where current of c;
      elsif(v_temp.sal = 5000)then
         delete from emp where current of c;
      end if;
    end loop;
    commit;    
end;

其中,“current of c”表示游标当前所指向的记录


分享到:
评论

相关推荐

    Oracle PL/SQL实战(待续)

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与PL的程序设计特性,是Oracle数据库系统中用于创建存储过程、函数、触发器和包的主要工具。在这个"Oracle PL/SQL实战(待续)"的主题中,我们将深入...

    Oracle PL/SQL实例编程(PL/SQL经典书籍)

    Oracle PL/SQL是一种强大的编程语言,它将数据库管理和应用程序逻辑紧密结合起来,是Oracle数据库系统中的核心组件之一。这本书“Oracle PL/SQL实例编程”显然旨在深入讲解如何利用PL/SQL进行实际开发工作,通过实例...

    oracle pl/sql从入门到精通 配套源代码

    PL/SQL还提供了游标(CURSOR)机制,允许我们逐行处理查询结果。此外,PL/SQL还支持集合类型,如VARRAY(可变数组)和TABLE(表类型),这对于处理大量数据非常有用。 这本书的配套源代码可能会涵盖以下几个方面: ...

    PL/SQL手册———oracle10g

    ### PL/SQL手册——Oracle 10g #### 概述 PL/SQL(Procedural Language for SQL)是Oracle数据库的一种内置编程语言,用于增强SQL的功能并支持更复杂的业务逻辑处理。它结合了SQL的数据操作能力和过程化的编程结构...

    Oracle PL/SQL学习官方教材

    4. **游标**:在处理大量数据时,游标(Cursor)是非常重要的工具。教材会介绍如何声明、打开、提取和关闭游标,以及如何在循环中使用游标遍历结果集。 5. **记录和表操作**:PL/SQL提供了内置的DML(数据操纵语言...

    PL/SQL语言的编译与游标编程实例(十).pdf

    在PL/SQL中,可以使用显式游标(Explicit Cursor)或隐式游标(Implicit Cursor)。 - 隐式游标是由数据库自动管理的游标,用于处理SELECT语句返回单行数据的情况。 - 显式游标需要用户在PL/SQL代码中声明、打开、...

    oracle 中 pl/sql 只是学习方法

    4. **存储过程和函数**:存储过程是一组预先编译的PL/SQL语句,可以在需要时调用,减少网络通信,提高性能。函数与存储过程类似,但必须返回一个值。它们可以用于封装复杂的业务逻辑,增强代码复用性。 5. **异常...

    PL/SQL中用到的几种不同类型的游标写法(转)

    在PL/SQL(Procedural Language/Structured Query Language)中,游标是处理单行或一组数据的关键工具,尤其在数据库编程中。游标允许程序员逐行操作数据集,而不仅仅是整个数据集作为一个整体。本篇文章将深入探讨...

    Web pl/sql报表制作过程

    Web PL/SQL报表制作过程是一种将数据库数据转化为用户友好、可编辑的HTML报表的方法,它结合了HTML语言和PL/SQL编程,使得开发者能够创建直观且实用的在线报表。以下是对这一过程的详细说明: 1. **制作报表模板**...

    oracle pl/sql实例精讲student数据库模式数据和表脚本

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据库操作能力和Procedural Language的编程结构,用于在Oracle数据库环境中创建复杂的应用程序。在"Oracle PL/SQL实例精讲student数据库模式"中,我们将深入探讨...

    pl/sql精通

    4. 控制结构:PL/SQL提供了流程控制结构,包括IF...THEN...ELSIF...ELSE、CASE、FOR循环、WHILE循环,以及BEGIN...END块结构,用于编写复杂的程序逻辑。 5. SQL语句:PL/SQL可以直接嵌入SQL语句,执行查询、插入、...

    PL/SQL 核心基础代码

    4. **过程与函数**:PL/SQL中的过程(PROCEDURE)和函数(FUNCTION)是可重用的代码块,可以接受参数并返回结果。它们可以被其他PL/SQL代码或SQL语句调用。 5. **异常处理**:通过BEGIN-EXCEPTION-END结构,我们...

    PL/SQL学习笔记

    PL/SQL中的SELECT语句可以返回结果集,可以使用游标(Cursor)来处理这些结果集。游标可以是显式的也可以是隐式的。显式游标需要显式地声明、打开、提取数据和关闭。游标的属性包括%NOTFOUND、%FOUND、%ISOPEN和%...

    第九讲 PL/SQL语言对数据库的交互作用.pdf

    根据提供的文件内容,我们可以从中提取到关于PL/SQL语言及其对数据库交互作用的丰富知识点,本知识点详解将围绕以下几个方面展开:PL/SQL基本操作、PL/SQL处理数据库记录、游标(Cursor)的概念及其在PL/SQL中的使用...

    PL/SQL学习资料

    PL/SQL,全称Procedural Language/Structured Query Language,是Oracle数据库的一种扩展,它将SQL的查询功能与过程式编程语言(如Pascal或C)的控制结构结合在一起,为数据库开发提供了一种强大的工具。这个“PL/...

    Oracle PL/SQL

    PL/SQL 中有两种类型的游标:隐性游标(Implicit Cursors)和显性游标(Explicit Cursors)。 隐性游标(Implicit Cursors) 隐性游标是 PL/SQL 自动创建的游标,它们通常用于实现 SELECT 语句的结果集。隐性游标...

    PL/SQL基础

    此外,PL/SQL还有游标(CURSOR),用于逐行处理查询结果。游标通常与FOR循环一起使用,以遍历和操作查询结果集。 最后,PL/SQL中的事务管理也是关键。你可以使用`COMMIT`提交事务,`ROLLBACK`回滚事务,或者`...

    oracle pl sql 实例精解 源代码

    通过阅读和执行这些脚本,读者能掌握如何在PL/SQL中进行数据操作、数据转换、数据聚合,以及如何使用PL/SQL进行数据库编程,包括调用系统包、处理PL/SQL记录类型、游标变量以及数组等高级特性。 总的来说,这个资料...

    ORACLE8 PLSQL程序设计_sql_code.zip_oracle pl/sql_pl sql code_pl/sql_

    4. **CV1**: "CV1"可能代表"Cursor Variable 1",04-CV1.PC可能涉及到如何声明和使用游标变量,这是PL/SQL中处理查询结果集的常见方法。 5. **PRCMP**: "PRCMP"可能指的是过程或函数的编译,07-PRCMP.PC可能涵盖...

    PL/SQL基础一之pl/sql块

    PL/SQL,全称为Procedural Language/Structured Query Language,是Oracle数据库的一种扩展,它将SQL语句与过程性编程语言结合在一起,为数据库管理提供了更强大的功能。本篇文章主要探讨PL/SQL的基础知识,包括其...

Global site tag (gtag.js) - Google Analytics