文章目录
Oracle 游标的使用——游标cursor 和 游标sys_refcursor 的使用
游标知识点
游标分为静态游标和动态游标两大类。
1、静态游标:显式游标和隐式游标称为静态游标,因为在使用他们之前,游标的定义已经完成,不能再更改。
(1)显式游标:用于处理SELECT语句返回的多行数据;人为创建,干预。举例:CURSOR
(2)隐式游标:用于处理SELECT INTO和非查询的DML语句;系统自动创建,管理。
2、动态游标:游标在声明时没有设定,在打开时可以对其进行修改。分为强类型游标和弱类型游标。
(1)强类型动态游标:在声明变量时使用return关键字定义游标的返回类型。举例:REF CURSOR RETURN
(2)弱类型动态游标:在声明变量时不使用return关键字定义游标的返回类型。举例:REF CURSOR、SYS_REFCURSOR
一般动态游标有 REF CURSOR、REF CURSOR RETURN、SYS_REFCURSOR。其中,REF CURSOR RETURN 为强类型,REF CURSOR 为弱类型、SYS_REFCURSOR 为系统预定义(在STANDARD包中定义的)弱类型。
(一)静态游标
1、显式游标:CURSOR 的使用
declare
CURSOR cur_emp IS select * from scott.emp;
row_emp scott.emp%rowtype;
begin
open cur_emp; --开启游标
loop
fetch cur_emp into row_emp; -- fetch into 获取游标的值
exit when cur_emp%notfound; -- 如果没有获取到值,则退出循环
dbms_output.put_line(row_emp.empno || ' ' || row_emp.ename); --输出
end loop;
close cur_emp; --关闭游标
end;
2、隐式游标
可参考文章:Oracle 游标详解(cursor)
知识点:
静态游标分为两种:隐式游标和显式游标。
(二)动态游标
1、自定义类型:REF CURSOR 的使用
declare
TYPE refcursor IS REF CURSOR RETURN scott.emp%rowtype; -- 定义游标
cur_emp refcursor;
row_emp scott.emp%rowtype;
begin
open cur_emp for select * from scott.emp;
loop
fetch cur_emp into row_emp; -- fetch into 获取游标的值
exit when cur_emp%notfound; -- 如果没有获取到值,则退出循环
dbms_output.put_line(row_emp.empno || ' ' || row_emp.ename); --输出
end loop;
close cur_emp;
end;
动态游标知识点:1、动态游标的格式:
TYPE 游标类型 IS REF CURSOR; --定义一个动态游标 游标名 游标类型;2、动态游标的两种类型:
(1)强类型动态游标:在声明变量时使用return关键字定义游标的返回类型。
示例:TYPE refcursor IS REF CURSOR RETURN scott.emp%rowtype; – 定义游标
(2)弱类型动态游标:在声明变量时不使用return关键字定义游标的返回类型。
示例:TYPE refcursor IS REF CURSOR; – 定义游标
2、系统类型:SYS_REFCURSOR 的使用(属于动态游标中的弱类型动态游标)
使用oracle9i提供的SYS_REFCURSOR弱类型游标,定义游标都省了
declare
cur_emp SYS_REFCURSOR;
row_emp scott.emp%rowtype;
begin
open cur_emp for select * from scott.emp;
loop
fetch cur_emp into row_emp; -- fetch into 获取游标的值
exit when cur_emp%notfound; -- 如果没有获取到值,则退出循环
dbms_output.put_line(row_emp.empno || ' ' || row_emp.ename); --输出
end loop;
close cur_emp;
end;
参考资料
本文详细介绍了Oracle数据库中的游标概念,包括静态游标的显式和隐式用法,以及动态游标的自定义类型REF CURSOR和系统类型SYS_REFCURSOR的应用。通过对各种游标类型的实例讲解,帮助读者理解游标的使用和区别。

392

被折叠的 条评论
为什么被折叠?



