首页 > 解决方案 > 在 java oracle 中我如何绑定值,java.sql.SQLException: Missing IN or OUT parameter at index::

问题描述

这是我的 SQL

SELECT *
  FROM (SELECT T_GDS.OWNER_NO,
               T_GDS.GOODS_NO,
               T_GDS.GOODS_NAME,
               T_GDS.GOODS_LENGTH,
               T_GDS.GOODS_WIDTH,
               T_GDS.GOODS_HEIGHT,
                T_GDS.MARKETINGAUTHORISATIONHOLDER,
               (SELECT MIN(T_STK.DISPLAY_LOCATION)
                  FROM VIW_FD_STOCK T_STK
                 WHERE T_STK.GOODS_ID = T_GDS.GOODS_ID) DISPLAY_LOCATION
          FROM FD_GOODS T_GDS
          LEFT JOIN REC_GOODS_RST T_RST
            ON T_GDS.GOODS_ID = T_RST.GOODS_ID
         WHERE T_GDS.IS_AVAILABLE = 'Y'
           AND T_RST.LWH_MOD_FLG IS NULL
           AND T_GDS.IS_GIFT = 'N'
           AND (T_GDS.GOODS_LENGTH < = 1 OR T_GDS.GOODS_WIDTH < = 1 OR
               T_GDS.GOODS_HEIGHT < = 1)
           AND EXISTS
         (SELECT 1 FROM FD_STOCK T WHERE T.GOODS_ID = T_GDS.GOODS_ID))
 WHERE (:GOODS_NO IS NULL OR GOODS_NO LIKE '%' || :GOODS_NO || '%')
   AND (:GOODS_NAME IS NULL OR GOODS_NAME LIKE '%' || :GOODS_NAME || '%') 
   AND (:DISPLAY_LOCATION IS NULL OR DISPLAY_LOCATION LIKE '%' || :DISPLAY_LOCATION || '%') 
   ORDER BY DISPLAY_LOCATION,GOODS_NO  
call = conn.prepareCall(SQL);
call.setObject("GOODS_NO", obj.get("Value"), obj.getInteger("Type"))
call.setObject("GOODS_NAME", obj.get("Value"), obj.getInteger("Type"))
call.setObject("DISPLAY_LOCATION", obj.get("Value"), obj.getInteger("Type"))

但我收到错误 java.sql.SQLException: Missing IN or OUT parameter at index:: 4

我在 SQL 中有两个“GOODS_NO”、“GOODS_NAME”和“DISPLAY_LOCATION”,我该怎么办?

标签: javaoraclejdbc

解决方案


OracleConnection connection = conn.unwrap(OracleConnection.class);
ocall = (OracleCallableStatement) connection.prepareCall(SQL);
……………………………………
ocall.setObjectAtName(obj.getString("ParameterName"),obj.get("Value"),obj.getInteger("Type"));

推荐阅读