【DB2报错】执行存储过程报 SQLCODE:-420 SQLSTATE:22018,解决方法在这里。

2024-07-21 1659阅读

执行存储过程的时候碰到这个报错:

Invalid character found in a character string argument of the function  "DECFLOAT"...SQLSTATE:22018 SQLCODE:-420

不要慌!!遇事不决先翻译:

【DB2报错】执行存储过程报 SQLCODE:-420 SQLSTATE:22018,解决方法在这里。
(图片来源网络,侵删)

翻译:在函数 "DECFLOAT" 的字符串自变量中找到无效字符。

报错解释 :

原因分析:

处理方式:

情况一:

情况二:


报错解释 :

SQLCODE:-420  函数 函数名这里指的是报错信息里的DECFLOAT的字符串自变量包含在数字 SQL 常量中无效的字符。 由于使用 CAST 规范并将 函数名 DECFLOAT作为目标数据类型,或者将一个自变量隐式强制类型转换为数字数据类型而调用了此函数。 用于 SQL 语句中的函数或数据类型可能是 函数名 DECFLOAT的同义词。

SQLSTATE:22018 CAST 规范 或者 CAST 标量函数的字符值无效。

用户响应:更改 SQL 语句,使每个操作数或 VALUES 子句中的每行有完全相同的列数。


原因分析:

根据提示找到问题语句所在地方,是一个IF条件里的语句

/*--------------------------------------
情况一:字段类型说明 
DEPTNO decimal(2,0)
--------------------------------------*/
SELECT COUNT(1) FROM EMP WHERE DEPTNO  ''

/*---------------------------------------------
情况二:字段类型说明 
var_col varchar(8)
var_col里的枚举值都是数字,也有''(空字符串)的情况
-----------------------------------------------*/
SELECT var_col FROM test_table WHERE var_col > 0

处理方式

情况一:

SELECT COUNT(1) FROM EMP WHERE DEPTNO ''

这个判断是无效的,可以把条件去掉,但是在mysql那里是可以执行的。

ps:因为 DEPTNO 字段类型 decimal 它属于数值类型之一,所以字段本来就不允许出现空字符串的情况,所以where 条件那里不能够和 '' 进行比较。


情况二:

SELECT var_col FROM test_table WHERE var_col > 0:

如果不用 CAST 函数转换 var_col想和0比较改成以下两种语句之一就可以了:

# 和'0' 字符串进行比较
SELECT var_col FROM test_table WHERE var_col > '0'
# 用函数把0转成字符串
SELECT var_col FROM test_table WHERE var_col > to_char(0)

ps:

  1. 如果字段类型是 varchar 类型你要对它进行数值比较,需要把值转成数字的字符串形式,所以例子中的 var_col varchar(8) 虽然里面的值都是数字,但是和整数 0 比较会报错的。
  2. 另外假如 var_col 里面的数据 存在 ‘’ 两个引号的这种空字符串,这条sql 也会报错但是转成字符串就可以比较。

存储过程一定要用日志作为debug,方便找问题。

其他报错 的原因码以及其他报错的错误状态码可以在下面 IBM 的链接查看。

👇👇👇👇👇👇👇👇👇👇👇
SQL0500 - SQL0749 - IBM Documentationhttps://www.ibm.com/docs/en/db2/11.1?topic=messages-sql0500-sql0749#sql0668n有需要文档的同学也可以私信我~

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]