zoukankan      html  css  js  c++  java
  • oracle:游标,cursor

    隐式游标:


    1.无论何时SQL语句执行,当改SQL语句不存在显式游标时,任何特定PL/SQL语句块都会产生一个隐式游标。

    2.游标自动与每个DMLyuju (UPDATE,INSERT,DELETE)建立关联。

    3.所有UPDATE 和 DELETE 语句都有标识被当前操作所影响数据行集合的游标。

    4.INSERT 语句需要存储位置来接收即将插入数据库的数据。

    5.最近一次呗打开的游标成为 SQL 游标。

    处理隐式游标时,oracle 会自动执行OPEN,FETCH CLOSE 操作。

    SET SERVEROUPUTT ON
    BEGIN
      UPDATE student
             SET  xxxx
          WHERE xxxx;
    DBMS_OUTPUT.LINE( SQL%ROWCOUNT);
    END;

    显式游标:

    1.声明游标。这会在内存中建立游标的初始化环境。

    2.打开游标。打开被声明的游标,并分配内存。

    3.检索游标。被声明和打开的游标能够检索数据。

    4.关闭游标。使用后的游标必须被关闭,以释放所有分配的内存。

    声明游标:

    CURSOR cursor_name IS SELECT_statement;

    声明后游标在获取数据时需要定义一个暂时保存数据的变量,通常使用 记录(RECORD)实现,PL/SQL 支持三种记录,基于表的,基于游标的,用户自定义的。

    前两种都使用同样一种格式声明。

    record_name [table_name |cursor_name ]  %ROWTYPE;

    打开游标:

    打开游标是下面4个动作会自动发生:

    1.会检索WHERE 字句中的变量(包括绑定变量)。

    2.基于变量的值,决定活跃的数据集,PL/SQL引擎会执行针对该游标的查询。只在游标打开时检索变量。

    3.PL/SQL 引擎标识活跃集的数据——就是满足WHERE子句条件,来至于所有涉及表的数据行。

    4.把活跃数据集的指针设置为第一行数据。

    OPEN cursor_name;

    检索数据:

    1.FETCH 命令用于活跃集数据中,每次检索一行数据。通常在一个循环中完成这个任务的。然后把活跃集中每行数据保存到相应的变量或者PL/SQL中,连续对每行数据执行这种操作。

    2.在每个FETCH豫剧之后,活跃数据集指针继续前一到下一个数据行。因此,每个eFETCH都会返回活跃数据集中连续的数据行。直到获取整个数据集。最后一个FETCH 语句不会给输出变量赋值,他仍旧保留原来的值。

    LOOP
        FETCH cursor_name INTO record_name;
        EXIT WHEN cursor_name%NOTFOUND;
        ;
    END LOOP;

    FETCH 语句的写法。

    FETCH cursor_name INTO record_name;
    
    or
    
    FETCH cursor_name INTO variables;

    关闭游标:

    CLOSE cursor_name;

    游标的属性:

    %NOTFOUND  , %FOUND  ,  %ROWCOUNT   , %ISOPEN

    游标FOR循环

    可以简化游标的4个步骤。

    DECLARE
      CURSOR cursor_name IS SELECT_statement;
    BEGIN
      FOR  record_name IN cursor_name
      LOOP
         NULL;
      END LOOP;
    END;

    上面的语句包括了游标的 OPEN FETCH CLOSE 步骤,其中 record_name 自动获取游标的属性,不需要另外定义,当数据读取完毕后能够自动关闭游标。

  • 相关阅读:
    TypeScript学习笔记(七):模块
    TypeScript学习笔记(六):泛型
    TypeScript学习笔记(五):接口
    TypeScript学习笔记(四):函数
    TypeScript学习笔记(三):类
    TypeScript学习笔记(二):基本数据类型及数据转换
    TypeScript学习笔记(一):介绍及环境搭建
    Egret的VS环境搭配
    [U3D Demo] 手机飞机大战
    Unity3D之UGUI学习笔记(三):EventSystem
  • 原文地址:https://www.cnblogs.com/Azhu/p/2677431.html
Copyright © 2011-2022 走看看