【发布时间】:2016-11-09 01:16:30
【问题描述】:
我正在尝试在 shell 脚本中使用 SQL Loader,因此我使用的是命令行参数。我即时创建控制文件,然后在加载后在脚本中删除它。我的问题是我的数据文件有回车并且很多记录被丢弃到.bad。我知道在指定 INFILE 后我需要使用“str '\n'”。但是我该如何使用命令行呢?
以下是我的代码示例。非常感谢任何帮助。
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
【问题讨论】:
-
数据文件在 UNIX 中具有源和目标,只是当我在 Windows 上使用 Notepad++ 查看它时,当我选择显示 EOL 符号时,我会在每一行的末尾看到 CR LF。
-
日志中的实际拒绝原因是什么?该数据可以从 Linux 加载到一个组成的表中。
-
啊..我正在查看我自己的日志文件,它提供的信息较少......我明白了问题所在。我将用这个问题回答我自己的问题。
-
感谢您的帮助,亚历克斯。
标签: sql oracle sql-loader