`

PL/SQL(oracle)4_游标(cursor)

阅读更多

1、游标的概念
cursor:实际上是一块内存工作区,用来存放DML或者select操作的结果。
2、游标的分类:
   隐式游标:声明、打开及管理都是Oracle自动维护的,通常用来处理DML操作或者返回单行的select。
   隐式游标的几个属性:
   %Rowcount:会返回最近执行的一条SQL语句所影响的记录行数。
   %Found:
   %Notfound:
   %isOpen:
   %前缀为SQL
  
   练习:使用替代变量删除指定部门的员工,并显示删除的员工数量。

Begin
       Delete From emp Where deptno = &dept;
       dbms_output.put_line('删除的员工数为:'||sql%rowcount);
End;

  
   显式游标:声明、打开及管理都是需要程序员手动操作的。通常用来处理查询结果是多行或零行的情况。
   1、声明:在declare部分使用:
   Cursor 游标名 Is 查询语句;
   注意:查询语句不能带into子句。

 

cursor emp_cursor is select empno,ename from emp ;

 

   2、打开:
   语法:open 游标名; 写在begin块中。
   打开游标实际上就是相当于执行游标所对应的查询语句,并且把查询结果集放入到内存中。
   3、提取数据:
   语法:fetch 游标名 Into 变量名列表|记录型变量 ,写在begin块,该语句通常是放在一个循环中。
   第一次提取数据之前游标的指针指向第一行,然后每执行一次提取,指针自动向下移动一行。
   注意:变量名列表一定要和游标声明时所对应的查询语句中的列的个数及数据类型保持一致。
   如果变量为记录型变量,那么该变量的内部分量一定要和游标声明时所对应的查询语句中的列的个数及数据类型保持一致。
   游标指针只能向下移动。
   4、关闭游标:
   语法:close 游标名;相当于释放内存。
   显示游标的几个属性:
   %Rowcount:返回的是已经从游标中提取到的记录行数。
   %Found:
   %Notfound:
   %isOpen:
   %前缀为游标名
   练习:使用游标,遍历出所有部门平均工资在1000以上的部门ID,部门名称,平均工资及人数。

   Declare
      Cursor avg_cursor Is Select e.deptno,dname,Avg(sal) ,Count(empno)
   From emp e ,dept d
   Where e.deptno = d.deptno
   Group By e.deptno,d.dname
   Having Avg(sal)>1000;
      v_deptno dept.deptno%Type;
      v_dname dept.dname%Type;
      v_avgsal emp.sal%Type;
      v_count Number;
   Begin
      Open avg_cursor;
      Loop
        Fetch Avg_cursor Into v_deptno,v_dname,v_avgsal,v_count ;
        Exit When avg_cursor%Notfound;
        dbms_output.put_line('部门编号为'||v_deptno'||的部门名称为'||v_dname||',其平均工资为:'||v_avgsal||',人数为'||v_count);
      End Loop;
      Close avg_cursor;
   End;
 


  5、几种方便使用游标的方式。
     a.游标和记录
        1.使用游标名%Rowtype 声明一个记录型变量。
        2.直接使用fetch 游标名 Into 记录型变量名。 
     b.游标式的For循环
       语法:
       For 记录型变量名 In 游标名 Loop
           循环体;
       End Loop;
      
       说明:记录型变量名不用事先声明。
             此种写法,oracle会自动打开游标,从游标中提取数据,关闭游标。
      c.游标式的for循环
        可以直接省略游标的声明,把游标所对应的SElect语句直接放到for循环的in子句中,注意要在两端加上括号。

    练习:使用游标式的For循环,遍历出所有员工姓名,所在部门名称,即使这个员工没有部门。

   Begin
      For avg_record In ( Select ename,dname From emp e ,dept d Where e.deptno = d.deptno(+) ) Loop
          dbms_output.put_line('部门编号为'||avg_record.ename||'的部门名称为'||avg_record.dname);
      End Loop;         
   End;


   6、带参数的游标
      a、游标声明时和以前有变化,需要在游标名后面指定形式参数列表。
      b、在打开游标时,需要给形式参数赋予响应的实参列表。
      c、提取数据以及关闭游标和先前没有变化。
    7、for Update [Of Column Reference] [Nowait]:该子句用来给游标所对应的查询加锁的。
    8、where Current Of 游标名:用来标示从游标中取出的当前行。
   
    练习:判断每个部门的工资总和,如果大于10000,则给该部门的人员工资增加10%,否则增加20%。

    Declare
       Cursor sumsal_cursor Is Select Sum(sal) sumsal,deptno From emp Group By deptno For Update;
    Begin
       For r_1 In sumsal_cursor Loop
           If r_1.sumsal >10000 Then
              Update emp Set sal = sal*1.1 Where deptno = r_1.deptno;
           Else
              Update emp Set sal = sal*1.2 Where deptno = r_1.deptno;
           End If;
       End Loop;
    End ;      
 

 

分享到:
评论

相关推荐

    Oracle PL/SQL实战(待续)

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与PL的程序设计特性,是Oracle数据库系统中用于创建存储过程、函数、触发器和包的主要工具。在这个"Oracle 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可能涵盖...

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

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

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

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

    Oracle PL/SQL学习官方教材

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

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

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

    pl_sql基本语法例子.rar_SQL2569_oracle_pl/sql_plsql增删改查

    PL/SQL是Oracle数据库系统中的一个重要组成部分,它是一种结合了SQL与过程编程的语言,用于在Oracle环境中编写存储过程、函数、触发器等数据库对象。本资料主要涵盖了PL/SQL的基本语法以及数据的增删改查操作和视图...

    oracle 中 pl/sql 只是学习方法

    Oracle中的PL/SQL是一种强大的编程语言,它是Oracle数据库与应用程序之间的桥梁,专为数据库操作而设计。PL代表“过程化语言”(Procedural Language),SQL则是“结构化查询语言”(Structured Query Language)。...

    Oracle教案 Oracle 存储过程 游标 SQL语句 PL/SQL

    Oracle 教案:深入理解 Oracle 存储过程、游标与 SQL 语句及 PL/SQL Oracle 是全球领先的数据库管理系统提供商,不仅提供数据库产品,还包括中间件、云计算服务等全面的企业级解决方案。"Oracle"一词源于古希腊神话...

    oracle pl sql 实例精解 源代码

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与Procedural Language的控制结构,被广泛用于Oracle数据库的开发和管理。本资料集是"Oracle PL/SQL实例精解",提供了丰富的源代码示例,帮助读者深入...

    pl/sql及常见实用oracle语句学习

    Oracle数据库是世界上最广泛使用的数据库系统之一,而PL/SQL则是Oracle特有的编程语言,用于处理数据库中的数据。在本文中,我们将深入探讨PL/SQL以及Oracle数据库中的一些常见实用语句。 PL/SQL全称为Procedural ...

    Oracle PL/SQL

    Oracle PL/SQL 学习指南 Oracle PL/SQL 是一种功能强大且灵活的编程语言,广泛应用于 Oracle 关系数据库管理系统中。本学习指南旨在帮助读者快速掌握 PL/SQL 的基础知识和高级技术。 PL/SQL 区块(BLOCK)的结构 ...

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

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

    Web pl/sql报表制作过程

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

    pl/sql精通

    《PL/SQL精通》这本书是针对Oracle数据库管理系统中PL/SQL编程语言的深入学习指南。Oracle SQL是Oracle数据库系统的核心语言,而PL/SQL则扩展了SQL的功能,提供了过程化编程的能力,使得数据库管理和开发更加高效和...

    PL/SQL Developer8.04官网程序_keygen_汉化

    PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL ...

    Oracle_PLSQL游标的学习

    Oracle PL/SQL 游标的学习 游标是 Oracle PL/SQL 中的一个重要概念,它允许用户访问和操作结果集中的数据。游标可以理解为是一个映射在结果集中的一行数据上的位置实体,有了游标,用户就可以访问结果集中的任意一...

    PL/SQL 核心基础代码

    PL/SQL,全称Procedural Language/Structured Query Language,是Oracle数据库的一种扩展,它集成了SQL语言的查询功能和过程性编程语言的控制结构,主要用于编写数据库应用程序。本资源"PL/SQL 核心基础代码"是针对...

    PL/SQL学习笔记

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

    PL/SQL基础

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

Global site tag (gtag.js) - Google Analytics