oracle中的游标

Posted 铭烟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

 

 

 

以上是关于oracle中的游标的主要内容,如果未能解决你的问题,请参考以下文章

在游标内检索 Oracle 中的选择计数(*)

动态更改oracle游标中的列

java实现调用ORACLE中的游标和包

oracle中的游标

Oracle:在游标声明中使用自定义函数

如何实现Oracle数据库中的动态游标