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

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

 

1)登陆SQLPLUS,用户为SCOTT,利用该用户提供的表EMPsql

[sql] 数据库

C:/Users/Administrator>sqlplus scott/scott  服务器

 

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

 

[sql] code

CREATE OR REPLACE FUNCTION GETEMPCURSOR(PRM_CHOICE IN NUMBER)  接口

RETURN  SYS_REFCURSOR  内存

IS  get

  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");

相关文章
相关标签/搜索