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 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