游标变量

来源:互联网 发布:如何测试网络的连通性 编辑:程序博客网 时间:2024/05/11 01:11
与游标一样,游标变量也是一个指向多行查询结果集合中当前数据行的指针。但与游标不同的是,游标变量是动态的,而游标是静态的。
游标只能与指定的查询相连,即固定指向一个查询的内存处理区域,而游标变量则可与不同的查询语句相连,它可以指向不同查询语句的内存处理区域(但不能同时指向多个内存处理区域,在某一时刻只能与一个查询语句相连),只要这些查询语句的返回类型兼容即可。
 
声明游标变量
游标变量为一个指针,它属于参照类型,所以在声明游标变量类型之前必须先定义游标变量类型。在PL/SQL中,可以在块、子程序和包的声明区域内定义游标变量类型。
语法格式为:
 
TYPE ref_type_name IS REF CURSOR [ RETURN return_type];
 
其中:ref_type_name为新定义的游标变量类型名称;
      return_type 为游标变量的返回值类型,它必须为记录变量。


在定义游标变量类型时,可以采用强类型定义和弱类型定义两种。强类型定义必须指定游标变量的返回值类型,而弱类型定义则不说明返回值类型。
声明一个游标变量的两个步骤:
步骤一:定义一个REF CURSOR数据类型,如:
TYPE ref_cursor_type IS REF CURSOR;
步骤二:声明一个该数据类型的游标变量,如:
cv_ref REF_CURSOR_TYPE;


例:声明两个强类型定义游标变量和一个弱类型定义游标变量
create or replace procedure p_test_refcusor_define is  TYPE deptrecord IS RECORD(    Dept_no   dept.deptno%TYPE,    Dept_name dept.dname%TYPE,    dept_Loc  dept.loc%TYPE);  TYPE deptcurtype IS REF CURSOR RETURN dept%ROWTYPE;  TYPE deptcurtyp1 IS REF CURSOR RETURN deptrecord;  TYPE curtype IS REF CURSOR;  Dept_c1 deptcurtype;  Dept_c2 deptcurtyp1;  Cv      curtype;begin  null;  --    COMMIT;end p_test_refcusor_define;


1 0