当前位置: 首页 > 知识库问答 >
问题:

DB2 SQL错误:执行准备好的语句时出现SQLCODE=-302

黄仲渊
2023-03-14
SELECT  BUS_NM, STR_ADDR_1, CITY_NM, STATE_CD, POSTAL_CD, COUNTRY_CD,
        BUS_PHONE_NB,PEG_ACCOUNT_ID, GDN_ALERT_ID, GBIN, GDN_MON_REF_NB,
        ALERT_DT, ALERT_TYPE, ALERT_DESC,ALERT_PRIORITY 
FROM ( SELECT A.BUS_NM, AE.STR_ADDR_1, A.CITY_NM, A.STATE_CD, A.POSTAL_CD,
              CC.COUNTRY_CD,  A.BUS_PHONE_NB, A.PEG_ACCOUNT_ID, 'I' || 
              LPAD(INTL_ALERT_DTL_ID, 9,'0') GDN_ALERT_ID, 
              LPAD(IA.GBIN, 9,'0') GBIN, IA.GDN_MON_REF_NB,
              DATE(IAD.ALERT_TS) ALERT_DT, 
              XMLCAST(XMLQUERY('$A/alertTypeConfig/biqCode/text()' passing  
                IAC.INTL_ALERT_TYPE_CONFIG as "A") AS CHAR(4)) ALERT_TYPE, 
              , ROW_NUMBER() OVER () AS "RN" 
       FROM ACCOUNT A, Other tables 
       WHERE IA.GDN_MON_REF_NB = '100'  
         AND A.PEG_ACCOUNT_ID = IAAR.PEG_ACCOUNT_ID  
         AND CC.COUNTRY_CD = A.COUNTRY_ISO3_CD 
       ORDER BY IA.INTL_ALERT_ID ASC )  
WHERE  ALERT_TYPE  IN (" +TriggerType+ ");

我将其更改为接受setString中的TriggerType,如下所示:

SELECT BUS_NM, STR_ADDR_1, CITY_NM, STATE_CD, POSTAL_CD, COUNTRY_CD,
       BUS_PHONE_NB,PEG_ACCOUNT_ID, GDN_ALERT_ID, GBIN, GDN_MON_REF_NB,
       ALERT_DT, ALERT_TYPE, ALERT_DESC,ALERT_PRIORITY 
FROM ( SELECT A.BUS_NM, AE.STR_ADDR_1, A.CITY_NM, A.STATE_CD, A.POSTAL_CD, 
              CC.COUNTRY_CD,  A.BUS_PHONE_NB, A.PEG_ACCOUNT_ID, 
              'I' || LPAD(INTL_ALERT_DTL_ID, 9,'0') GDN_ALERT_ID,
              LPAD(IA.GBIN, 9,'0') GBIN, IA.GDN_MON_REF_NB, 
              DATE(IAD.ALERT_TS) ALERT_DT, 
              XMLCAST(XMLQUERY('$A/alertTypeConfig/biqCode/text()' passing  
                IAC.INTL_ALERT_TYPE_CONFIG as "A") AS CHAR(4)) ALERT_TYPE, 
              ROW_NUMBER() OVER () AS "RN" 
       FROM ACCOUNT A, other tables 
       WHERE IA.GDN_MON_REF_NB = '100'  
         AND A.PEG_ACCOUNT_ID = IAAR.PEG_ACCOUNT_ID   
         AND CC.COUNTRY_CD = A.COUNTRY_ISO3_CD 
       ORDER BY IA.INTL_ALERT_ID ASC )  
WHERE  ALERT_TYPE  IN (?);

设置触发器类型如下:

if (StringUtils.isNotBlank(request.getTriggerType())) {
   preparedStatement.setString(1, triggerType != null ? triggerType.toString() : "");
}

获取错误为

原因:com.ibm.DB2.jcc.am.sqldataexception:DB2 SQL错误:sqlcode=-302,sqlstate=22001,sqlerrmc=null,driver=4.19.26

共有1个答案

慕容明煦
2023-03-14

-302 SQLCODE表示某种类型的转换错误。

SQLState22001通过告诉我们您正在尝试将一个大字符串强制化为一个小变量来缩小范围。鉴于您的问题中的信息有限,我猜是xmlcast才是罪魁祸首。

DB2不会把30磅的垃圾塞进一个4磅的袋子里,也就是说,它会给您一个错误。也许在演员阵容中给XML一些额外的空间会有帮助。如果您需要确保它最终只有4个字符长,可以显式地执行left(XMLCAST(...asvarchar(64)),4)。这样,xmlcast就有了它所需要的空间,但您可以将其缩减以适应提取时的变量。

 类似资料:
  • 问题内容: 我使用准备好的语句编写了select语句。每次尝试运行时都会出现此错误。我如何克服这个错误?我的jdbc连接器是mysql-connector- java-5.1.13-bin.jar。我的代码: 错误代码.. 2013年10月1日,下午1:23:23 sanin.lands.model.View_ads_cls getAdDetail 问题答案: 错误在这一行 这样做

  • 场景:继我之前的问题(在存储过程中使用游标循环行MySQL)之后,我尝试执行一个嵌套的prepare语句,在该语句中,我向外部语句输入一个日期,然后调用内部语句,该语句从表中获取数据。 代码: 问题:这段代码运行时没有错误,但没有给出任何结果。如果我只运行第一个准备好的语句,一个接一个地直接输入变量,就可以了。所以我猜问题在于我的第二句话。 问题:你知道我做错了什么吗? Obs:第二个代码应该循环

  • 我的目标是:我需要从表1中检索name2),但是我还需要检索具有相同名字的人的状态(在本例中是statusY)。注意,对于name2的检索,我不能依赖于json对象的索引(name2可能是json对象的第一个键)。 到目前为止,我将如何做到这一点:A)在第一个查询中从表1中获取name2),对其进行清理,以及B)在第二个查询中使用它,然后正确地检索状态 语句A)和B)都是参数化的准备好的sql语句

  • Java代码如下所示: 以下是我正在使用的所有东西的版本,以供参考:

  • 问题内容: 我使用准备好的语句编写了select语句。每次尝试运行它都会出现此错误。我如何克服这个错误?我的jdbc连接器是mysql-connector- java-5.1.13-bin.jar。我的代码: 错误代码.. 2013年10月1日,下午1:23:23 sanin.lands.model.View_ads_cls getAdDetail 问题答案: 错误在这一行 这样做