• Oracle使用REF 动态游标


    1:定义REF动态游标类型

    TYPE <类型名> IS REF CURSOR

    RETURN <返回类型>;

     声明REF动态游标
    
    <游标名>  <类型名>
    

    打开REF动态游标

    OPEN <游标名> FOR <查询语句>

    2:REF动态游标的分类

     主要分为两类,强类型和弱类型的,强类型的为带有RETURN语句的REF动态游标,弱类型为不带有RETURN语句的REF动态游标,弱类型的动态游标可以与任何查询语句匹配,但是强类型的动态游标只能与特定的查询语句匹配。
    

    强类型REF动态游标实例:

    DECLARE

       TYPE refcur_t IS REF CORSOR
    
      RETURN employees%ROWTYPE;
    
      refcur refcur_t;
    
     v_emp employees%ROWTYPE;
    

    BEGIN

     OPEN refcur FOR
    
     SELECT * FROM employees;
    
     LOOP
    
        FETCH refcur INTO v_emp;
    
        EXIT WHEN refcur%NOTFOUND;
    
        dbms_output.put_line(refcur % ROWCOUNT || ' ' || v_emp.name);
    
     END LOOP;
    
     CLOSE refcur;
    

    END;

    弱类型REF动态游标实例一:

    DECLARE
    
       TYPE refcur_t IS  REF CURSOR;
    
        refcur   refcur_t;
    
        e_id  NUMBER;
    
        e_name  VARCHAR2(50);
    
    BEGIN
    
       OPEN refcur FOR
    
       select id, name FROM employees;
    
       FETCH refcur INTO e_id, e_name;
    
      WHILE refcur%FOUND LOOP
    
              DBMS_OUTPUT.PUT_LINE('#' || e_id  ||  ':'  || e_name);
    
        FETCH refcur  INTO e_id, e_name;
    
      END LOOP;
    
      CLOSE refcur;
    

    END;

    弱类型REF动态游标实例二:根据用户的输入查询部门表或者员工信息表

    DECLARE

    TYPE refcur_t IS REF CURSOR;

    refcur refcur_t;

    pid NUMBER;

    p_name VARCHAR2(50);

    selection VARCHAR2(1) := UPPER(SUBSTR(‘&tab’, 1, 1));

    BEGIN

    IF selection = ‘E’ then

     OPEN refcur FOR
    
           select id, name from employees;
    
     dbms_output.put_line('====员工信息======');
    
    elseif selection = 'D' then
    
       open refcur for
    
               select department_id, department_name  from departments;
    
        dbms_output.put_line('=====部门信息========')'
    
     else
    
        dbms_output.put_line('请输入员工信息(E) 或者部门信息(D)');
    
        return;
    
    end if;
    
    fetch refcur into p_id, p_name;
    
    while refcur %FOUND LOOP
    
          dbms_output.put_line('#' ||  p_id  || ':' || p_name);
    
          fetch refcur into p_id, p_name;
    
     end loop;
    
     close refcur;
    

    end;

  • 相关阅读:
    AutoCAD如何移动零件和缩放零件图
    AutoCAD如何输入文字
    AutoCAD如何设置A0A1图纸
    AutoCAD如何批量设置线宽
    AutoCAD如何快速标注零件序号
    AutoCAD如何将dwf转成dwg格式
    AutoCAD参照编辑期间不允许使用 SAVE 命令怎么办
    AutoCAD2004启动时出现fail to get CommcntrController的怎么办
    AutoCAD 样条曲线如何结束
    AutoIt3常见问题解答
  • 原文地址:https://www.cnblogs.com/lllini/p/11955294.html
Copyright © 2020-2023  润新知