文章目录
一、游标简介
为支持Oracle处理SQL语句,需要创建一个名为上下文区域的内存区域,其中包含用于处理该语句所需的信息,游标是相对于上下文区域的句柄或者指针。
二、游标类型
- 每当SQL语句执行时,Oracle会自动地声明一个隐式游标。
- 对于返回多行数据的任何世纪公园旬,该程序可以定义显示游标,这个声明允许应用程序顺序地处理游标所返回的每行数据。
三、隐式游标
- 无论何时SQL语句执行,当该SQL语句不存在显示游标时,都会产生一个隐式游标。
- 游标自动地与每个DML(数据操作)语句(update,delete和insert)建立关联。
- 在处理隐式游标的过程中,oracle自动地执行open,fetch和close操作。
游标有一些属性例如ROWCOUNT。SQL%ROWCOUNT会返回被更新的数据行数
BEGIN
UPDATE ooag_t
SET ooag011 = '王五'
WHERE ooag001 = '00261'
AND ooagent = 70;
-- 输出更新的行数
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT);
END;
四、显示游标
在PL/SQL语句块的DECLARE部分对该游标命名,即生成显示游标。
处理显示游标的过程包括如下步骤:
- 声明游标:这会在内存中建立游标的初始化环境。
- 打开游标:打开被声明的游标,并分配内存。
- 检索游标:现在,被声明和打开的游标能够检索数据。
- 关闭游标:被声明、打开和检索使用后的游标必须被关闭,以释放所分配的内存。
4.1 声明游标
游标声明会定义游标的名称,并把游标名称与某SELECT语句建立关联。
CURSOR c_cursor_name IS select statement
建议定义游标名称时始终使用前缀c_
DECLARE
CURSOR c_OoagCursor IS
SELECT * FROM ooag_t WHERE ooagent = 70;
......
4.2 记录类型
一个记录就是一个复合的数据结构,这意味着它由一个或者多个元素组成。记录非常像数据库表中的一行数据。
PL/SQL支持三种类型的记录:
- 基于表的
- 基于游标的
- 程序员定义的
基于表的记录就是该记录的结构来自于数据库表中的某些字段的列表。基于游标的记录是记录的数据结构匹配预定义游标的元素。为创建一个基于表或游标的记录,可以使用%ROWTYPE属性
record_name table_name pr cursor_name%ROWTYPE
DECLARE
-- vr_ooag 定义了一个和表ooag_t相同的结构
-- 使用vr_ooag.xxx,xxx表示ooag_t中的列
vr_ooag ooag_t%ROWTYPE;
BEGIN
SELECT *
INTO vr_ooag
FROM ooag_t
WHERE ooagent = 70
AND rownum = 1;
DBMS_OUTPUT.PUT_LINE(vr_ooag.ooag011);
END;
上例演示的基于表的记录
下面演示基于游标的记录
DECLARE
-- 定义一个游标
CURSOR c_ooag_ooag011 IS
SELECT ooag001,ooag011
FROM ooag_t
WHERE ooagent = 70;
-- 定义一个记录类型参照游标
vr_ooag_ooag011 c_ooag_ooag011%ROWTYPE;
......
4.3 打开游标
打开游标时