db2执行存储过程的一次诡异报错

问题描述:

UltraEdit本地写一个存储过程,上传到linux服务器,执行存储过程,db2 -td@ -vf AIP_DD_CLEAR500.sql ,报错:

DB21034E The command was processed as an SQL statement because it was not a

valid Command Line Processor command.  During SQL processing it returned:

SQL0408N  A value is not compatible with the data type of its assignment

target.  Target name is "S_ERRLVL".  LINE NUMBER=7.  SQLSTATE=42821

问题解决:

1、先查询db2错误码42821,释义为“数值不能被更新或插入,因为他与列的数据类型不兼容”,初步判断可能为数据库表的列和存储过程中的列格式不符,开始检查两者区别,发现完全一致,排除此原因;

2、判断是否自己导入方式异常,在linux上找一个正常的存储过程,执行,可以正常导入,说明导入方法正确;

3、由1,2可以判断是自己存储过程的问题,开始对比服务器上可以正常导入的文件和不能导入的文件,发现文件格式不一样:

[appuser@busquery lizhao_bak]$ file -i AIP_DD_CLEAR*.sql

AIP_DD_CLEAR100.sql: text/plain; charset=iso-8859-1

AIP_DD_CLEAR500.sql: text/plain; charset=utf-8

[appuser@busquery lizhao_bak]$

此时,恍然大悟,原来是文件格式导致异常,进一步浏览异常文件,发现文件中很多字符乱码,更加证明格式异常;这也是因为前几天本地写的存储过程直接上传格式正常,下意识忽略了这个问题。本地重新编辑文件,修改文件格式,UE-文件-转换-Unicode转ASCLL(O),转换格式完成,重新上传文件,浏览文件,显示正常,再次执行,成功 。

问题总结:

1、linux上执行文件时一定要先检查文件是否正常,尤其是从本地上传的文件;

2、如果文件异常,什么样的报错都有可能发生;

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容