xml文件: <typeAlias alias="vpmnBeanModel" type="com.znwbb.vpmn.bean.Vpmn"/> <resultMap id="vpmnInfo" class="vpmnBeanModel">
    <result property = "callbegintime" column = "callbegintime"/>
    <result property = "calltype" column = "calltype"/>
    <result property = "callduration" column = "callduration"/>
    <result property = "callingpartynumber" column = "callingpartynumber"/>
    <result property = "calledpartynumber" column = "calledpartynumber"/>
</resultMap> <parameterMap id="vpmnSelect" class="java.util.HashMap">
           <parameter property="cur_sql" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet"   resultMap="vpmnInfo" mode="OUT"/>
           <parameter property="v_rowcount" jdbcType="INT" javaType="java.lang.Integer" mode="OUT"/>
           <parameter property="in_str_begintime" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/>
           <parameter property="in_str_endtime" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/>
           <parameter property="in_call" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/>
           <parameter property="in_called" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/> 
           <parameter property="in_currentpage" jdbcType="INT" javaType="java.lang.Integer" mode="IN"/> 
           <parameter property="in_pagesize" jdbcType="INT" javaType="java.lang.Integer" mode="IN"/> 
           <parameter property="in_qrytype" jdbcType="INT" javaType="java.lang.Integer" mode="IN"/> 
</parameterMap>

<procedure id="vpmnprom" parameterMap="vpmnSelect">
    <![CDATA[{call ireport_vpmn(?,?,?,?,?,?,?,?,?)} ]]> 
</procedure>
Java:   public List<Vpmn> vpmnBySelect(Vpmn vpmn, int currentPage, int pageSize, int querytype)
    {
        Map map = new HashMap();
        
        map.put("cur_sql", OracleTypes.CURSOR);
        
        map.put("v_rowcount", java.sql.Types.INTEGER);
        
        map.put("in_str_begintime", vpmn.getStarttime() );
      
        map.put("in_str_endtime", vpmn.getEndtime());
      
        map.put("in_call", vpmn.getCallingpartynumber() );        map.put("in_called", vpmn.getCalledpartynumber());
        
        map.put("in_currentpage", currentPage );
        
        map.put("in_pagesize", pageSize);
      
        map.put("in_qrytype", querytype);
                
        getSqlMapClientTemplate().queryForList("vpmnprom", map);        
        
        @SuppressWarnings("unused")
        List list = (List) map.get("cur_sql");
        int result = (Integer) map.get("v_rowcount");        
        if (list == null || list.size() == 0 || result == 0) 
        {
            list = new ArrayList();  
        }
        return list; 
    }
以上是代码,存储过程应该没什么问题,因为我在sql plus中执行是没问题,但是在调用的时候,他总是说我的输出参数有问题,执行到红色部分时就出错,报错信息如下:
org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [null]; error code [17004]; --- The error occurred in com/znwbb/vpmn/dao/xml/vpmn.xml. --- The error occurred while executing query procedure. --- Check the {call ireport_vpmn(?,?,?,?,?,?,?,?,?)}. --- Check the output parameters (register output parameters failed).请问各位有什么办法解决????

解决方案 »

  1.   

    参数应该是#参数#把
     调用 map.put("cur_sql", "参数");
      

  2.   


    cur_sql是一个游标,那样写可以的,是能得到游标返回的结果集,
    v_rowcount是表示总记录数的,是int型的(我不加这个就不会报错,就可以有正确数据)
      

  3.   

    <parameter property="v_rowcount" jdbcType="number" javaType="java.lang.Integer" mode="OUT"/>
      你是什么数据库
      

  4.   

    终于知道错误了
       <procedure id="vpmnprom" parameterMap="Integer">
            <![CDATA[{call ireport_vpmn(?,?,?,?,?,?,?,?,?)} ]]> 
       </procedure>
      

  5.   

    <select id="selectCount" resultClass="Integer">
    select count(1) from elca_dubious_attach_info_tb where
    #logtime2#>logtime and logtime> #logtime#
    </select>
    这是我写的返回的也是int
      

  6.   


    数据库是Oracle,parameterMap="Integer"??返回的结果集是不是对应bean的么,对于这个v_rowcount我只要它的记录数就可以了吧,这样我就可以进行其他的运算,这边直接返回一个Integer不可能吧,难道要专门写一个<parameterMap>,就只为返回它?????我还是没太明白,麻烦你能否在将明白点
      

  7.   


    这种直接用sql获取条数的有用过,但是这个问题是在存储过程中,过程中是可以获取到得,我现在是要调用这个过程,就需要输出它吧,但是没成功,出了这样的错
      

  8.   

    终于知道错误了
      <procedure id="vpmnprom" parameterMap="Integer">
      <![CDATA[{call ireport_vpmn(?,?,?,?,?,?,?,?,?)} ]]>  
      </procedure>开始没认真看Oracle的是把,那就明白了他的错误是无效的列类型。你检查为什么把。
    返回一个Map对吧这个应该是可以的 
      

  9.   

    输出参数就是一个游标(返回的是查询的结果集),和一个int型的参数  
    <parameter property="cur_sql" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet"   resultMap="vpmnInfo" mode="OUT"/>
    <parameter property="v_rowcount" jdbcType="INT" javaType="java.lang.Integer" mode="OUT"/>
    这两句不是设置吗???要么还是还需要在其他地方设置下????