zoukankan      html  css  js  c++  java
  • orcale 之 PL/SQL的游标

      根据我们之前了解到的情况,SQL是面向集合的,我们的查询结果一般包含多条数据,而在PL/SQL 中的变量一般只能存放一条数据,因此变量是无法满足我们的需求的。这时候我们就需要引入游标来为我们解决问题了。

      我们知道在 PL/SQL 中可以使用数据控制语言(DML)对数据进行操作,而在使用这些的时候 Orcale 会在内存中为其分配一个缓存区。而游标就是指向该缓存区的指针。它可以对查询结果集的每一行数据分别进行单独的处理。

      游标分为显式游标和隐式游标。显式游标是由用户声明操作的一种游标,而隐式游标是 Orcale 为所有的操作语言自动声明和操作的游标。

    显式游标

      对于显式游标的操作分为:声明,打开,提取,关闭。

      1. 声明游标

        在游标的声明中定义了游标的名字而且这个游标和一个 SELECT 关联起来。除此之外显式游标必须在 DEXLARE 中。它的语法如下:

    CURSOR <游标名> IS SELECT <语句>
    

      注意:这里的SELECT 语句是可以带有 UNION 或者 MINUS 的语句。

      2. 打开游标

        语法如下:

    OPEN <游标名>;
    

      打开游标就会执行定义的 SELECT语句,执行完毕后,查询出来的结果会放入内存,游标的指针会指向查询结果的头部,

      3. 提取游标

        打开游标后的工作就是从查询出来的集合进行取值了,取值的语句是 FETCH 语法有两种格式:

    FETCH <游标名> INTO <变量列表>;
    FETCH <游标名> INTO PL/SQL 记录;
    

        FETCH 每执行一次游标会向后移动一次直到结束位置。

      4. 关闭游标

    CLOSE <游标名>;

       5. 例子

    --创建临时表
    create table t_emp
    (	tempne number(4) primary key,
    	tename varchar2(20)
    );
    create table t_emp2
    (	tempne number(4) primary key,
    	tename varchar2(20)
    );
    
    DECLARE
      emp_no number(4); --定义变量
      emp_nanme varchar2(20);
    CURSOR emp_cur IS --定义游标
      SELECT empno, ename 
      FROM emp;
    BEGIN
    OPEN emp_cur; --打开游标
      --将第一行的数据放入变量中,之后游标后移
      FETCH emp_cur INTO emp_no, emp_nanme;
      LOOP
        EXIT WHEN NOT emp_cur%FOUND; --如果游标已经到末尾结束
        IF emp_no = '7839' THEN
          INSERT INTO t_emp values(emp_no,emp_nanme);
        else
          INSERT INTO t_emp2 values(emp_no,emp_nanme);
        END IF;
        FETCH emp_cur INTO emp_no, emp_nanme;
      END LOOP;
    CLOSE emp_cur; --关闭游标
    END;
    /
    

     隐式游标

       上面我们学到了显示游标的使用,接下来我们说下隐式游标。当我们在PL/SQL 中直接使用 SELECT 语句进行操作,则就是隐式的使用了游标,这就是隐式游标。这种游标无需定义,也不需要打开和删除。如下所示

    BEGIN    
        SELECT empno, ename INTO emp_no, emp_nanme FROM emp WHERE empno = 7839;
    END

      对于隐式游标来说必须要有一个 INTO 子句,因此对于隐式游标来说 SELECT 子句的返回值必须只有一行数据。

  • 相关阅读:
    java笔记之输入输出流
    英文单词个数统计及排序
    课后作业_程序员修炼之道读后感
    第五周-内网穿透简易搭建(远程查看javaweb程序)
    第五周总结
    结对开发
    第四周学习总结
    第四周--爬虫的学习
    第四周学习总结
    第三周---------学习动态规划
  • 原文地址:https://www.cnblogs.com/brother-four/p/6512556.html
Copyright © 2011-2022 走看看