2016-11-08 79 views
1

我想在shell腳本中使用SQL加載程序,所以我使用的是命令行參數。我將動態創建控制文件,然後在加載後在腳本中刪除它。我的問題是我的數據文件有回車符,很多記錄被丟棄到.bad。我知道我需要在INFILE指定後使用「str」\ n「」。但我怎麼用命令行來做到這一點?在SQL加載程序中使用回車換行命令行

下面是我的代碼示例。任何幫助是極大的讚賞。

LDRFILE=$LOCAL_HOME/data/rmse_loc.ctl 
    echo "LOAD DATA " > $LDRFILE 
    echo "TRUNCATE " >> $LDRFILE 
    echo "INTO TABLE "R2SCHD.RDF_LOC_HIER"" >> $LDRFILE 
    echo "FIELDS TERMINATED BY ',' " >> $LDRFILE 
    echo "OPTIONALLY ENCLOSED BY '\"' " >> $LDRFILE 
    echo "(" >> $LDRFILE 
    echo "LOC, " >> $LDRFILE 
    echo "LOC_NAME, " >> $LDRFILE 
    echo "DISTRICT, " >> $LDRFILE 
    echo "DISTRICT_NAME, " >> $LDRFILE 
    echo "DEFAULT_WH, " >> $LDRFILE 
    echo "DEFUALT_WH_NAME, " >> $LDRFILE 
    echo "LOC_TYPE, " >> $LDRFILE 
    echo "LOC_TYPE_NAME " >> $LDRFILE 
    echo ")" >> $LDRFILE 
    sqlldr userid=$CONNECT control=$LDRFILE log=$LOCAL_HOME/log/$PROGRAM_NAME.$INPUT_FILE.$RUN_DATE.log bad=$LOCAL_HOME/error/$PROGRAM_NAME.$INPUT_FILE.$RUN_DATE.bad data=$LOCAL_HOME/data/$INPUT_FILE 

下面是前5行中的數據文件中的CR/LF所有行結束的樣品:

34,"34 CARLISLE 67TH ST",3740,"CARLISLE NORTH",6620363,"DDDC REPLENISHMENT",S,"Store"^M 
240,"240 FELTWELL SHOP",7614,"UK EAST",2220671,"GDC REPLENISHMENT",S,"Store"^M 
5504,"5504 AM CLASS SIX",3720,"SAM S TEXAS",6620363,"DDDC REPLENISHMENT",S,"Store"^M 
5827,"5827 JAC CLASS 6",632,"JACKSON/SHAW",9820580,"DDDC REPLENISHMENT",S,"Store"^M 
100081,"100081 EGLIN MCS",944,"EGLIN AFB",6620363,"DDDC REPLENISHMENT",S,"Store"^M 
+0

數據文件具有內UNIX,它的來源和目的地就在我用Notepad ++做的Windows上查看它時當我選擇顯示EOL符號時,我會在每行的末尾看到CR LF。 – Adil

+0

日誌中的實際拒絕原因是什麼?這些數據從Linux加載成一個製作好的表格。 –

+0

啊..我正在查看我自己的日誌文件,它提供了更少的信息...我看到了什麼問題。我將就這個問題回答我自己的問題。 – Adil

回答

0

的問題是不與CR/LF但與的值中的一個列太大:(業餘的錯誤,我是新來的SQL裝載機,並期待在我自己創建的日誌,而不是實際的SQL日誌:

Record 98: Rejected - Error on table R2SCHD.RDF_LOC_HIER, column LOC_NAME. 
ORA-12899: value too large for column "R2SCHD"."RDF_LOC_HIER"."LOC_NAME" (actual: 26, maximum: 25)