在使用DATASTAGE+ORACLE把一個文本文件的數據加載到數據庫的時候,發現丟了一條記錄,查看了一下job log,說插入值對於列過大。
用排除法最後確定是IMA32F這一列的問題,在數據庫中關於這一列的定義是char(50)
可是源文件在transformer中已經做了截取處理了啊,substrings(trim(IMA32F),1,50) 這樣怎麼還會差不進去了。
很鬱悶,無奈使用@inrownum找到是第166行出錯了。打開文本文件,定位到166行,找到此字段的對應長度爲26位漢字,然後再找到截取後的,發現還是26位!!
咦,咋沒截斷呢?
原來DS中中文字符是作爲一個字符長度來處理的,而oracle中卻是佔用2個字符長度的
這樣26*2=52 已經超過了char(50),怪不得查不進去呢。。。。
原因查到,由於此字段只可能爲中文,所以改爲substrings(trim(IMA32F),1,25)
運行成功,搞定!