我使用的是的ibatis 2.3.4,oracle9.2:
   当我运行如下sqlmap配置的sql时,就出现了一个很奇怪的现象:
          <select id="getSingleForms" parameterClass="transfer2Form" resultMap="transfer2FormHeaderResult">
  <![CDATA[
        SELECT  MTH.HEADER_ID,
                MTH.REQUEST_NUMBER,
                SINO_FAQ_PKG.GET_ETS_FLEX_VALUE(MTH.HEADER_STATUS,'SUB_TRANS_STATUS') STATUS_NAME,
                MTH.CREATED_BY,
                IUV.USER_NAME CREATED_USER,
                TO_CHAR(MTH.CREATION_DATE, 'YYYY-MM-DD') CREATION_DATE,
                MTH.COMMENTS,
                MTH.FROM_IO_ID,
                MIL.LOCATION_CODE FROM_COMPANY_NAME,
                MTH.FROM_SUBINVENTORY_CODE,
                MIL.LOCATION_DESC FROM_LOCATOR_DESC,
                MTH.FROM_LOCATOR_ID
           FROM MTL_TXN_REQUEST_HEADERS MTH,
                IES_USER_ALL_V IUV,
                MTL_ITEM_LOCATIONS_V MIL
          WHERE IUV.USER_ID = MTH.CREATED_BY
            AND MTH.FROM_IO_ID = MIL.ORGANIZATION_ID
            AND MTH.FROM_SUBINVENTORY_CODE = MIL.SUBINVENTORY_CODE
            AND MTH.FROM_LOCATOR_ID = MIL.LOCATION_ID
            AND OUT_INV_TYPE = 0
            AND (MTH.HEADER_ID = NVL(#headerId#, MTH.HEADER_ID))
  ]]>
 </select>
   我传递的#headerId#是768,返回的结果中的HEADER_ID 却是763(763在sqlplus中查询是第一条记录的header_id),但其它列的值却是正常的.#headerId#一定不是空的,我测试了,并且结果也只返回了一条记录!
   如果我把上面的sql中AND (MTH.HEADER_ID = NVL(#headerId#, MTH.HEADER_ID))修改一下,改成如下:
    AND MTH.HEADER_ID =  #headerId#      
   结果就是正确的,header_id也是768.真是太奇怪了,那位大侠遇到过这种情况?

解决方案 »

  1.   

    建议把SQL语句简化些  做做测试找找原因
      

  2.   

    你拿到数据库上跑一下看看结果正确不?如果正确说明你sql文写的有问题。
    另外你帖子发错了应该在oracle区,这个问题不是框架的问题。
      

  3.   

    我已经在oracle里试了一下,结果正常,只返回了一条记录,而且值都对的!应该是框架的问题1
      

  4.   

    你的日志打印的sql结果是对的?那错误的结果是出现在哪个地方?
      

  5.   

    日志打印的结果不对!结果正确是在pl/sql里我直接将sql在pl/sql里进行查询时是正确的!
      

  6.   

    我想大家应该好好看看我的问题,也可能是我描述的不够准确,但使用(MTH.HEADER_ID = NVL(#headerId#, MTH.HEADER_ID))就会出现错误的结果,使用 MTH.HEADER_ID = #headerId# 就不出,问题的关键在这里!为什么会出现这样的结果.