繁体   English   中英

尝试从 Java 调用 select 语句时 SQL 中的无效数字异常

[英]Invalid Number Exception in SQL when trying to call select statement from Java

我试图从我的 Java 程序中调用一个select查询,但我收到Invalid Number错误。 我正在尝试调用这样的查询

code

 String[] l_arr = new String[]{"CUSTOMERCUMULATIVELIMIT"};

    l_rs = JDBCEngine.executeQuery(MessageFormat.format(
                        " SELECT  LIMITS,  P.PACKAGE_ID  FROM MSTGLOBALLIMITSPACKAGE P  ,MSTCUSTOMERPROFILE C  WHERE P.PACKAGE_ID = {0}   AND C.ID_CUST = ?    AND C.ID_ENTITY = ?  AND C.TYPEUSER = ?  AND C.ID_ENTITY = P.ID_ENTITY  AND P.PACKAGE_ID NOT LIKE ?",l_arr );

我收到这样的查询:

Result

SELECT LIMITS, P.PACKAGE_ID
  FROM MSTGLOBALLIMITSPACKAGE P, MSTCUSTOMERPROFILE C
 WHERE P.PACKAGE_ID = CUSTOMERCUMULATIVELIMIT
   AND C.ID_CUST = '00000144'
   AND C.ID_ENTITY = 'B001'
   AND C.TYPEUSER = 'ECU'
   AND C.ID_ENTITY = P.ID_ENTITY
   AND P.PACKAGE_ID NOT LIKE '*%'

我在P.PACKAGE_ID = {0}行中收到错误 Invalid number 。 我经历并知道如果我使用to_char我可以避免这个错误。 但我不确定如何在P.PACKAGE_ID = {0}使用to_char

PACKAGE_ID是类型的Varchar2CUSTOMERCUMULATIVELIMIT是在一列MSTCUSTOMERPROFILE类型的Number

任何帮助或建议将不胜感激。 谢谢。

只需将 to_char 添加到您的 sql,将 {0} 更改为 to_char({0})

l_rs = JDBCEngine.executeQuery(MessageFormat.format( " SELECT LIMITS, P.PACKAGE_ID FROM MSTGLOBALLIMITSPACKAGE P ,MSTCUSTOMERPROFILE C WHERE P.PACKAGE_ID = to_char({0}) AND C.ID_CUST = ? AND C.ID_ENTITY = ? AND C.TYPEUSER = ? AND C.ID_ENTITY = P.ID_ENTITY AND P.PACKAGE_ID NOT LIKE ?",l_arr );

您正在使用这条线:

WHERE P.PACKAGE_ID = CUSTOMERCUMULATIVELIMIT

由于没有单引号,SQL 将 CUSTOMERCUMULATIVELIMIT 视为数字,而不是字符串。

添加引号应该可以解决这个问题。

l_rs = JDBCEngine.executeQuery(MessageFormat.format(
                        " SELECT  LIMITS,  P.PACKAGE_ID  FROM MSTGLOBALLIMITSPACKAGE P  ,MSTCUSTOMERPROFILE C  WHERE P.PACKAGE_ID = '{0}'   AND C.ID_CUST = ?    AND C.ID_ENTITY = ?  AND C.TYPEUSER = ?  AND C.ID_ENTITY = P.ID_ENTITY  AND P.PACKAGE_ID NOT LIKE ?",l_arr );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM