zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    JSON, String,Map,实体对象之间的转换
    使用mybatis-plus进行多表的条件查询(模糊查询)
    Netty整合WebSocket的使用
    Java流(stream)的使用
    mysql 查询当天、本周,本月,上一个月的数据......
    第七章 Centos7下Jira-8.16.1的安装
    第六章 JIRA基础介绍
    第五章 Confluence忘记密码
    第四章 Confluence服务的迁移
    第三章 Docker部署Confluence
  • 原文地址:https://www.cnblogs.com/lllini/p/11955294.html
Copyright © 2011-2022 走看看