oracle中的游标
oracle中的游标分类:
显示游标,隐式游标,游标变量
游标变量又可以分为强游标和弱游标
强类型游标变量
弱类型游标变量:使用弱游标变量,可以关联任何查询
-- 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 };
以下这篇文章讲的比较好,可以参考
https://blog.csdn.net/qq_34745941/article/details/81294166