DB2 SQLCODE = -420,将 smallint 字段与空值进行比较时出错

Posted

技术标签:

【中文标题】DB2 SQLCODE = -420,将 smallint 字段与空值进行比较时出错【英文标题】:DB2 SQLCODE = -420, ERROR when comparing smallint fields with nulls 【发布时间】:2015-02-04 16:36:40 【问题描述】:

我正在尝试比较两个 smallint 字段以查找差异。一个表是一个待处理的更改表,在晚上由批处理作业读取,然后在执行其他活动的同时更新另一个表。批处理作业有一些问题,我正在研究这些问题。我想找到那些不同的值,并在发生这种情况时显示待定表的值。

给我带来麻烦的特定列 (CO_FT_FREQ_DAY) 在 smallint 字段中有空值,我认为这是我的问题的原因。 (或者它可能是一个待处理的添加,因此没有可比较的匹配值......)如您所见,我已尝试解决此问题,但它仍然无法正常工作。 我在此之前尝试过 ifnull ,但得到了同样的错误。我希望这能解决问题。

SELECT  T342.clientID
       ,T342.TS_340
       ,case when (case when t342.CO_FT_FREQ_DAY is null then 0 else
                        t342.CO_FT_FREQ_DAY end) <>
                    (case when t340.CO_FT_FREQ_DAY is null then 0 else
                         t340.CO_FT_FREQ_DAY end)
             then T342.CO_FT_FREQ_DAY
             else 0
             end as CO_FT_FREQ_DAY
FROM database.PendingChangeTable     T342
left outer join database.CurrentTable T340
on T340.ClientID = T342.ClientID
and T340.TS_PK = T342.TS_340
WHERE t342.clientID in (clientID list);

DSNT408I SQLCODE = -420,错误:字符串参数的值不是 接受 DECFLOAT 功能 DSNT418I SQLSTATE = 22018 SQLSTATE 返回码

【问题讨论】:

【参考方案1】:

UGH 发现问题了。设计表格的人在中途切换并将这些新列定义为字符字段,我错过了。所以我需要在我的 case 语句中将值设置为 '0' 而不是 0。

       ,case when (case when t342.CO_FT_FREQ_DAY is null then '0' else
                    t342.CO_FT_FREQ_DAY end) <>
                (case when t340.CO_FT_FREQ_DAY is null then '0' else
                     t340.CO_FT_FREQ_DAY end)
         then T342.CO_FT_FREQ_DAY
         else '0'
         end as CO_FT_FREQ_DAY
   ,case when ifnull(t342.CO_HT_FREQ_DAY,'0') <> 
                ifnull(t342.CO_HT_FREQ_DAY,'0')
         then ifnull(T340.CO_HT_FREQ_DAY,'0')
         else '0'
         end as CO_HT_FREQ_DAY

所以今天对我的教训是,当您遇到此错误时,请务必检查您的数据类型!

【讨论】:

这个答案对我帮助很大!!谢谢!!

以上是关于DB2 SQLCODE = -420,将 smallint 字段与空值进行比较时出错的主要内容,如果未能解决你的问题,请参考以下文章

DB2 SQL 错误:SQLCODE=-204,SQLSTATE=42704

在 DB2 中选择期间 SQLCODE= -9999

DB2 SQL Error: SQLCODE=-1585, SQLSTATE=54048

DB2 错误 SQLCODE=-103,SQLSTATE=42604

尝试使用 MicroStrategy 连接时 DB2 上的 SQLCODE -1334

原因:com.ibm.db2.jcc.am.SqlSyntaxErrorException:DB2 SQL 错误:SQLCODE=-440,SQLSTATE=42884