CREATE OR REPLACE
--创建存储过程时,加上用户名,否则mybatis调用时无法识别 PROCEDURE 'USERNAME'."MLRETENTIONSTAT" (one OUT INT, two OUT INT, three OUT INT, four OUT INT) IS CURSOR C_STOCK IS --申明游标 SELECT ST.SHELVE_NO,ST.IN_TIME,TU.NUM,TU.DRAW_NO,TU.QR_CODE,TU.M_SIZE,TU.M_SPEC,TU.P_TYPE FROM TB_DM_ML_STOCK st INNER JOIN TB_DM_TUBE tu ON ST.TU_ID=TU.TU_ID; BEGIN one:= 0; four:= 0; three:=0; two:=0; FOR C_ROW IN C_STOCK LOOP IF C_ROW.IN_TIME IS NOT NULL THEN IF ADD_MONTHS(C_ROW.IN_TIME, 1)> SYSDATE THEN one:=one+C_ROW.NUM; ELSIF ADD_MONTHS(C_ROW.IN_TIME, 3)> SYSDATE THEN two:=two+C_ROW.NUM; ELSIF ADD_MONTHS(C_ROW.IN_TIME, 6)> SYSDATE THEN three:=three+C_ROW.NUM; ELSE four:=four+C_ROW.NUM; END IF; END IF; END LOOP; END;
mybatis映射文件写法:
<select id="retentionState" statementType="CALLABLE" parameterMap="mlMap"> { call MLRETENTIONSTAT(?,?,?,?) } </select> <parameterMap type="java.util.Map" id="mlMap"> <parameter property="one" mode="OUT" jdbcType="INTEGER"/> <parameter property="two" mode="OUT" jdbcType="INTEGER"/> <parameter property="three" mode="OUT" jdbcType="INTEGER"/> <parameter property="four" mode="OUT" jdbcType="INTEGER"/> </parameterMap>
DAO中对应方法:
Map<String,Integer> retentionState(Map<String,Integer> map);
使用游标的FOR循环介绍: