zoukankan      html  css  js  c++  java
  • oracle中的游标

    oracle中的游标分类:

    显示游标,隐式游标,游标变量

    游标变量又可以分为强游标和弱游标

    强类型游标变量

    使用强游标变量,您只能关联返回指定类型的查询
    -- strong type
    TYPE empcurtyp IS REF CURSOR RETURN employees%ROWTYPE;
    -- strong cursor variable
    cursor1 empcurtyp;

    弱类型游标变量使用弱游标变量,可以关联任何查询

    -- weak type TYPE

    genericcurtyp IS REF CURSOR;

    -- weak cursor variable

    cursor2 genericcurtyp;

     

    游标变量

    TYPE type_name IS REF CURSOR [ RETURN return_type ]

    预定义类型的变量:SYS_REFCURSOR

    隐式游标

    显式游标主要是用于对查询语句的处理,尤其是在查询结果为多条记录的情况下;而对于非查询语句,如修改、删除操作,则由ORACLE 系统自动地为这些操作设置游标并创建其工作区,这些由系统隐含创建的游标称为隐式游标,隐式游标的名字为SQL,这是由ORACLE 系统定义的。对于隐式游标的操作,如定义、打开、取值及关闭操作,都由ORACLE 系统自动地完成,无需用户进行处理。用户只能通过隐式游标的相关属性,来完成相应的操作。在隐式游标的工作区中,所存放的数据是与用户自定义的显示游标无关的、最新处理的一条SQL 语句所包含的数据。

    格式调用为: SQL%

    SQL%ISOPEN

     

    FALSE

    FALSE

    FALSE

    FALSE

    SQL%FOUND

    TRUE

    有结果

     

    成功

    成功

    SQL%FOUND

    FALSE

    没结果

     

    失败

    失败

    SQL%NOTFUOND

    TRUE

    没结果

     

    失败

    失败

    SQL%NOTFOUND

    FALSE

    有结果

     

    成功

    失败

    DECLARE
        V_deptno department_id%TYPE :=&p_deptno;
    BEGIN
        DELETE FROM employees WHERE department_id=v_deptno;
        IF SQL%NOTFOUND THEN
            DELETE FROM departments WHERE department_id=v_deptno;
        END IF;
    END;
    

      

    显示游标

    显式游标处理需四个 PL/SQL步骤:

    1.定义/声明游标:就是定义一个游标名,以及与其相对应的SELECT 语句

    CURSOR cursor_name[(parameter[, parameter]…)] 
               [RETURN datatype]
        IS 
            select_statement;

    2.打开游标:就是执行游标所对应的SELECT 语句,将其查询结果放入工作区,并且指针指向工作区的首部,标识游标结果集合。如果游标查询语句中带有FOR UPDATE选项,OPEN 语句还将锁定数据库表中游标结果集合对应的数据行。
    OPEN cursor_name[([parameter =>] value[, [parameter =>] value]…)];

    提取游标数据:就是检索结果集合中的数据行,放入指定的输出变量中。 

    FETCH cursor_name INTO {variable_list | record_variable };

    关闭游标
    CLOSE cursor_name;

     以下这篇文章讲的比较好,可以参考

     https://blog.csdn.net/qq_34745941/article/details/81294166

  • 相关阅读:
    DFS迷宫递归所有路径 新手入门
    【翻译】Ext JS最新技巧——2016-3-4
    Android进程通信之一:两种序列化方式
    Ext JS 6应用程序Build后出现“c is not a constructor return new c(a[0])”的处理
    简约才是王道? CardView 的使用
    经过一段的努力,终于成为CSDN博客专家,感谢大家支持
    ACM_Uppercase(水题)
    ACM_01背包
    2018年北京信息科技大学第十届程序设计竞赛暨ACM选拔赛-B-precise math function
    goj N皇后问题
  • 原文地址:https://www.cnblogs.com/ydbk/p/14845936.html
Copyright © 2011-2022 走看看