Db2执行UNION查询报错SQLCODE=-420,求原因解析
Db2 SQLCODE=-420错误原因解析
这个错误(SQLCODE=-420, SQLSTATE=22018)的直接原因是UNION操作中前后两个查询的对应列数据类型不兼容,Db2自动类型转换时失败:
- 第一部分查询的
APPOINTMENT_EFFECTIVE_DATE列:通过CASE语句返回的是字符串类型——满足条件时返回空字符串'',否则返回SUBSTR(A.RECORD_AREA,29,8)截取的字符值。 - 第二部分查询的
APPOINTMENT_EFFECTIVE_DATE列:C.APPT_LOB_EFF_DT字段大概率是日期类型、DECIMAL/DECFLOAT数值类型(比如以YYYYMMDD格式存储的数字日期)。
执行UNION时,Db2会强制统一两部分结果的列类型。如果C.APPT_LOB_EFF_DT是DECFLOAT/DECIMAL类型,Db2会尝试将第一部分的字符串转换为DECFLOAT,但第一部分中存在空字符串'',或者截取的字符包含非数字字符,无法转换为有效的数值,因此触发"字符字符串参数中发现无效字符"的错误。
另外注意:你的查询中存在无关联条件的隐式笛卡尔积(FROM子句直接罗列多表未加JOIN条件),虽然不是当前错误的诱因,但会导致结果集数据异常,建议后续补充表关联条件。
内容的提问来源于stack exchange,提问作者ZEHRA
相关产品推荐
相关产品推荐

