开发学院数据库Oracle 从概念到示例—Oracle引用(REF)游标 阅读

从概念到示例—Oracle引用(REF)游标

 2009-04-11 13:13:21 来源:WEB开发网   
核心提示:Ref游标 又称 "动态游标"(1)、在运行时使不同的语句与之关联(2)、Ref游标可以使用游标变量.游标变量 a. 一种引用类型 b. 可以再运行时指向不同的存储位置 c. Close语句关闭游标并释放用于查询的资源.游标变量的类型 a.具有约束的游标变量 - 也就是具有返回类型的游标变量 也称为

Ref游标 又称 "动态游标"

(1)、在运行时使不同的语句与之关联

(2)、Ref游标可以使用游标变量

.游标变量

a. 一种引用类型

b. 可以再运行时指向不同的存储位置

c. Close语句关闭游标并释放用于查询的资源

.游标变量的类型

a.具有约束的游标变量

- 也就是具有返回类型的游标变量 也称为”强游标"

b.无约束的游标变量

- 也就是没有返回类型的游标变量 也称为 “弱游标”

示例1:  弱型游标示例

声明时不需指定查询语句,即不指向任何区域

declare
   type RefEmpCur  is ref cursor;  --声明引用游标类型 游标返回的类型没有限制
   EmpCur RefEmpCur;  --游标变量
   EmpRow emp%rowtype; --存储游标查询到得结果
   flag int:=0;
begin
   flag :=&flag;
   if flag=0 then
      open EmpCur  for select * from emp where sal>500 and sal<2000;
   elsif  flag=1 then
      open EmpCur for select * from  emp where sal>=2000;
   elsif  flag=2 then
      open EmpCur for select * from  dept;  --弱类型游标对目标表没有限制,数据可以使来自任何表
   else
      open EmpCur for select * from emp;
   end if;
  /* for循环不能用于Ref游标,因为它是自动打开游标
   for EmpRow in EmpCur  loop
    DBMS_output.put_line('empno='||EmpRow.empno);
   end loop;
   */
   loop
      exit when EmpCur%notfound;  --如果没有查询到数据就退出
      fetch EmpCur into EmpRow;
      DBMS_output.put_line('empno='||EmpRow.empno);
   end loop;
   close EmpCur;
end;
/

示例1:  强型游标示例

declare
   type RefEmpCur  is ref cursor return emp%rowtype;  --游标仅能打开emp表的数据
   EmpCur RefEmpCur;  --游标变量
   EmpRow emp%rowtype; --存储游标查询到得结果
   flag int:=0;
begin
   flag :=&flag;
   if flag=0 then
      open EmpCur  for select * from emp where sal>500 and sal<2000;
   elsif  flag=1 then
      open EmpCur for select * from emp where sal>=2000;
   else
      open EmpCur for select * from emp;
   end if;

   loop
      exit when EmpCur%notfound;  --如果没有查询到数据就退出
      fetch EmpCur into EmpRow;
      DBMS_output.put_line('empno='||EmpRow.empno);
   end loop;
   close EmpCur;
end;
/

限制

1.不能在程序包中声明游标变量

2.远程子程序不能接受游标变量的值

3.不能使用比较操作符对游标变量进行相等或不相等测试

4.不能将空值赋予游标变量

5.表不能存储游标变量的值

Tags:概念 Oracle 引用

编辑录入:爽爽 [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接