db2執(zhí)行存儲過程的一次詭異報錯

問題描述:

UltraEdit本地寫一個存儲過程,上傳到linux服務(wù)器,執(zhí)行存儲過程,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,釋義為“數(shù)值不能被更新或插入,因為他與列的數(shù)據(jù)類型不兼容”,初步判斷可能為數(shù)據(jù)庫表的列和存儲過程中的列格式不符,開始檢查兩者區(qū)別,發(fā)現(xiàn)完全一致,排除此原因;

2、判斷是否自己導(dǎo)入方式異常,在linux上找一個正常的存儲過程,執(zhí)行,可以正常導(dǎo)入,說明導(dǎo)入方法正確;

3、由1,2可以判斷是自己存儲過程的問題,開始對比服務(wù)器上可以正常導(dǎo)入的文件和不能導(dǎo)入的文件,發(fā)現(xiàn)文件格式不一樣:

[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]$

此時,恍然大悟,原來是文件格式導(dǎo)致異常,進一步瀏覽異常文件,發(fā)現(xiàn)文件中很多字符亂碼,更加證明格式異常;這也是因為前幾天本地寫的存儲過程直接上傳格式正常,下意識忽略了這個問題。本地重新編輯文件,修改文件格式,UE-文件-轉(zhuǎn)換-Unicode轉(zhuǎn)ASCLL(O),轉(zhuǎn)換格式完成,重新上傳文件,瀏覽文件,顯示正常,再次執(zhí)行,成功 。

問題總結(jié):

1、linux上執(zhí)行文件時一定要先檢查文件是否正常,尤其是從本地上傳的文件;

2、如果文件異常,什么樣的報錯都有可能發(fā)生;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容