10.3.1游标变量简介
在PL/SQL中,指针是使用REF作为前缀进行定义的,因此游标变量类型就是REF CURSOR;
DECLARETYPE emp_type IS REF CURSOR RETURN emp%ROWTYPE;--定义游标变量类型
emp_cur emp_type; --声明游标变量
emp_row emp%ROWTYPE; --定义游标结果值变量
BEGIN
OPEN emp_cur FOR SELECT * FROM emp; --游标变量与静态游标的一个区别就是游标变量指向一个查询的工作区。静态游标指向的是数据库
LOOP
FETCH emp_cur INTO emp_row;
EXIT WHEN emp_cur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('员工名称:'||emp_row.ename);
END LOOP;
END;
10.3.2
声明游标变量类型
游标变量是一种引用类型,类似于C语言中的指针,在程序运行时,他可以指向不同的查询区域。它的定义与集合或记录一样,必须通过两个声明步骤来实现一个游标变量的定义。
(1)创建一个游标变量类型
(2)基于该类型创建实际的游标变量
TYPE cursor_type_naem IS REF CURSOR [RETURN return_type];
REF表示一个指针类型,RETURN指定游标将要返回的类型;
从Oracle9i开始,Oracle提供了一个预定义的弱类型游标类型,SYS_REFCURSOR。
注意:关闭一个还没有打开过的游标变量或已经关闭了的游标变量是非法的,PL/SQL会引发INVALID_CURSOR异常。
DECLARE
emp_cur SYS_REFCURSOR;
emp_row emp%ROWTYPE;
dept_row dept%ROWTYPE;
BEGIN
OPEN emp_cur FOR SELECT * FROM emp WHERE deptno = 20;
FETCH emp_cur INTO dept_row;
EXCEPTION
WHEN ROWTYPE_MISMATCH THEN
FETCH emp_cur INTO emp_row;
DBMS_OUTPUT.PUT_LINE('员工名称:'||emp_row.ename||'部门编号:'||emp_row.deptno);
END;