問題描述:
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ā)生;