10.3游标变量 --REF CURSOR

10.3.1游标变量简介

在PL/SQL中,指针是使用REF作为前缀进行定义的,因此游标变量类型就是REF CURSOR;

DECLARE
    TYPE 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;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值