Oracle学习笔记第十二天-02
游标
隐式游标
概念:Oracle自动在后台使用的游标,用户不参与任何操作,所以对用户是“透明”(隐藏)的。
特征:
- 不能手动打开、提取、关闭
- 使用SELECT…INTO…语句时,Oracle会自动创建、打开、取值(Fetch)、Close。
使用范围:
通过检查隐式游标属性,可以获取最近执行的select单行语句或者其它DML语句信息。
执行dml操作时会自动定义、打开名叫SQL的隐式游标,并且dml语句执完结束后,隐式游标自动关闭。
set serveroutput on;
declare
begin
--执行dml操作时会自动定义、打开名叫SQL的隐式游标
--并且dml语句执完结束后,隐式游标自动关闭
update emp set sal = sal + 100
where deptno = 10;
if sql%isopen then
dbms_output.put_line('游标处于打开状态');
else
dbms_output.put_line('游标处于关闭状态');
end if;
if sql%found then
dbms_output.put_line('更新成功,更新的行数为:'||sql%rowcount);
else
dbms_output.put_line('更新失败');
end if;
end;
/
REF游标(引用游标)(动态游标)
-- 语法
-- 定义PEF游标类型
type 游标类型 is ref cursor return 记录类型
-- 定义该类型的变量
游标变量 自定义REF游标类型
- 与其它复合类型一样,必须要定义自己的新的游标类型(要先定义数据的结构)以后,再用新的游标类型定义游标变量才可以使用。
- 表%rowtype 指出:返回的数据有几个列以及各列数据类型。
--演示:游标变量使用步骤 案例:输出所有员工姓名
DECLARE
--1. 定义引用游标类型
TYPE emp_cur_type IS REF CURSOR
RETURN emp%ROWTYPE;
--2. 定义游标变量
emp_cur emp_cur_type;
--3. 定义变量保存一行记录
emp_row emp%ROWTYPE;
BEGIN
--4. 打开游标
OPEN emp_curFOR SELECT * FROM emp ORDER BY sal DESC;
--5. 获取游标的一行数据。
FETCH emp_curINTO emp_row;
-- 循环获取数据
WHILE emp_cur%FOUND
LOOP
dbms_output.put_line(emp_row.ename||'-->'||emp_row.sal);
FETCH emp_curINTO emp_row;
END LOOP;
END;