zoukankan      html  css  js  c++  java
  • 存储过程使用游标变量返回结果集

    存储过程使用游标变量返回结果集

    1)登录SQLPLUS,用户为SCOTT,利用该用户提供的表EMP

    [sql] 

    C:/Users/Administrator>sqlplus scott/scott  

    2)编写一个FUNCTION,返回值为游标变量

    [sql] 

    CREATE OR REPLACE FUNCTION GETEMPCURSOR(PRM_CHOICE IN NUMBER)  

    RETURN  SYS_REFCURSOR  

    IS  

      EMPCURSOR SYS_REFCURSOR;  

    BEGIN  

      IF PRM_CHOICE = 1 THEN  

        OPEN EMPCURSOR FOR SELECT * FROM EMP WHERE DEPTNO = 10;  

      ELSIF   PRM_CHOICE =2 THEN  

        OPEN EMPCURSOR FOR SELECT * FROM EMP WHERE DEPTNO = 20;  

      ELSIF  PRM_CHOICE =3 THEN  

        OPEN EMPCURSOR FOR SELECT * FROM EMP WHERE DEPTNO = 30;  

      ELSE  

        OPEN EMPCURSOR FOR SELECT * FROM EMP;  

      END IF;  

      RETURN EMPCURSOR;  

    END;  

    3)编写一个PLSQL块,调用上面的FUNCTION得到返回的游标变量

    [sql] 

    DECLARE  

      EMPCURSOR SYS_REFCURSOR;  

      REC_EMP EMP%ROWTYPE;  

    BEGIN  

      EMPCURSOR := GETEMPCURSOR(10);  

      IF EMPCURSOR%ISOPEN THEN  

        LOOP  

            FETCH EMPCURSOR INTO REC_EMP;  

            EXIT WHEN EMPCURSOR%NOTFOUND;  

            DBMS_OUTPUT.PUT_LINE(''||'==>'||REC_EMP.ENAME);  

        END LOOP;  

      END IF;  

      CLOSE EMPCURSOR;  

    END;  

    4)几点说明:

    ①有三种语句可以控制游标变量的使用,分别是OPEN FOR、FETCH还有CLOSE。其中OPEN用于打开游标变量。FETCH用于将游标变量中的数据存放到变量当中存储。CLOSE用于在遍历完成之后,关闭游标。

    ②使用游标的时候,可以将REF CURSOR指定为强类型或者弱类型(在定义的后面增加RETURN ROWTYPE的方式),如果指定为强类型,小心避免出现类型不匹配的错误。

    ③游标变量可以在应用于数据库服务器之间进行传递,可以在数据库内部进行传递。应用或者数据库本身不具备单独的变量存储空间,其游标变量其实就是一个指向内存的指针,实质上这些数据是共享的。

    ④能够将游标的四个属性%FOUND,%NOTFOUND,%ISOPEN以及%ROWCOUNT应用到游标变量中,用于判断游标变量的状态。

    ⑤可以使用FETCH一次获取一条记录,也可以使用FETCH BULK COLLECT INTO 一次获取一条或者多条放到一个或者多个集合类型中。

    ⑥不要忘记关闭游标。

    ibatis  call

    <resultMap type="********.AdvNushiMikomiInputExcelOutPutDto" id="advNushiMikomiInputExcelOutPutDto">
    </resultMap>
    <select id="selectAdvNushiMikomiInputExcelSumiNetMokoCursor" parameterType="map" statementType="CALLABLE">
    <![CDATA[
    {#{resultList, mode=OUT, jdbcType=CURSOR, javaType=java.sql.ResultSet, resultMap=advNushiMikomiInputExcelOutPutDto} = call GETSUMIMOKOCURSOR(
    #{v_nengetsu,jdbcType=CHAR,mode=IN},
    #{v_uriageBuKaCode,jdbcType=CHAR,mode=IN},
    #{v_tantoBuKaCode,jdbcType=CHAR,mode=IN},
    #{v_gyosyuMcode,jdbcType=CHAR,mode=IN},
    #{v_advNushiCode,jdbcType=CHAR,mode=IN}
    )}
    ]]>
    </select>

    接口

    advNushiMikomiInputDao.selectAdvNushiMikomiInputExcelSumiNetMokoCursor(map);
    List<AdvNushiMikomiInputExcelOutPutDto> advNushiMikomiInputExcelSumiNetMoko = (List<AdvNushiMikomiInputExcelOutPutDto>)map.get("resultList");

  • 相关阅读:
    log4j使用教程
    (POI)Excel格式转Html格式
    log4j2使用教程
    Spring AOP 面向切面编程入门
    C# 标准事件模式
    1Angular的MVC和作用域
    3Angular的模块化
    2Angular的双向数据绑定(MVVM)
    5手动初始化Angular的模块与控制器
    python读取 UCS2 little endian(utf16le) 格式的文件
  • 原文地址:https://www.cnblogs.com/caogang/p/4625258.html
Copyright © 2011-2022 走看看