zoukankan      html  css  js  c++  java
  • 从概念到示例—Oracle引用(REF)游标

    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.表不能存储游标变量的值

  • 相关阅读:
    vue2手写vuex
    200.岛屿数量(DFS M-岛屿系列)
    739.每日温度(栈M)
    150.逆波兰表达式求值(栈M)
    20.有效的括号(栈L)
    前端性能优化与SEO优化整理
    Typescript:类型断言
    如何在浏览器中快速调试Typescript
    Typescript:枚举
    Typescript:接口
  • 原文地址:https://www.cnblogs.com/sunjie9606/p/2167420.html
Copyright © 2011-2022 走看看