oracle pl/sql之游标变量
与游标类似,游标变量也可以处理多行查询的结果集。但是,游标与游标变量是不同的,就 像常量和变量的关系一样。游标包括显式游标和隐式游标,它们都是静态定义的。当用户使用它们时,就需要再声明时定义查询。而游标变量是动态的,它不与特定 的查询绑定在一起,而是运行时才确定所使用的查询。
游标变量的定义包括两个步骤:
(1)定义CURSOR类型的指针
type ref_cursor_name is ref cursor[return teturntype];
(2)定义ref cursor类型的变量
type my_cursor is ref cursor;
这样定义的游标类型称为弱ref cursor类型,这是因为没有指定游标的返回类型,因此它能指向一个具有任意多列的select查询结果
强ref cursor类型要求用户声明构成所使用查询结果集的返回类型
type my_cursor is ref cursor return emp%rowtype;
游标变量的使用方法和游标相同都是要 声明--》打开--》检索--》关闭
程序演示:
declare
type my_cursor is ref cursor return emp%rowtype;
my_cursor_use my_cursor;
v_cursor emp%rowtype;
begin
open my_cursor_use for select * from emp;
loop
fetch my_cursor_use into v_cursor;
exit when my_cursor_use%notfound;
dbms_output.put_line(v_cursor.ename);
dbms_output.put_line(v_cursor.job);
end loop;
close my_cursor_use;
end;
注意:
使用游标变量真正的好处是在必须使用同一游标变量打开多个查询时,或根据运行时的条件,需要动态地把不同的查询赋予相同的游标体现。使用同一游标变量可以打开多个查询