Unix SQLLDR scipt提供了“意外的文件结束”#39;错误

时间:2015-03-18 20:26:48

标签: unix sqlplus etl sql-loader

全部,我正在运行以下脚本,使用unix box和sqlldr将数据加载到Oracle Server。之前它给了我一个错误,说sqlldr:command not found。我添加了“SQLPLUS< EOF”,它仍然给出了第12行意外结束文件语法错误的错误,但它只有11行代码。根据你的意思似乎是什么问题。

#!/bin/bash
FILES='ls *.txt'
CTL='/blah/blah1/blah2/name/filename.ctl'

for f in $FILES
do
    cat $CTL | sed "s/:FILE/$f/g" >$f.ctl
    sqlplus ID/'PASSWORD'@SERVERNAME << EOF sqlldr SCHEMA_NAME/SCHEMA_PASSWORD control=$f.ctl data=$f EOF
done 

1 个答案:

答案 0 :(得分:0)

sqlplus永远不会知道如何处理命令sqlldr。它们是两个互补的cmd-line实用程序,用于与Oracle DB连接。

注意将数据加载到架构中所需的sqlplusEOF等:

#!/bin/bash
#you dont want this FILES='ls *.txt'
CTL_PATH=/blah/blah1/blah2/name/'
CTL_FILE="$CTL_PATH/filename.ctl"
SCHEMA_NM=SCHEMA_NAME
SCHEMA_PSWD=SCHEMA_PASSWORD

for f in *.txt 
do
    # don't need cat! cat $CTL | sed "s/:FILE/$f/g" >"$f".ctl
    sed "s/:FILE/$f/g" "$CTL_FILE" > "$CTL_PATH/$f.ctl"
    #myBad sqlldr "$SCHEMA_NAME/$SCHEMA_PASSWORD" control="$CTL_PATH/$f.ctl" data="$f"
    sqlldr $SCHEMA_USER/$SCHEMA_PASSWORD@$SERVER_NAME control="$CTL_PATH/$f.ctl" data="$f" rows=10000 direct=true errors=999

done 

如果没有过于哲学,使用像FILES=$(ls *.txt)这样的作业是一个不好的习惯。相比之下,for f in *.txt将正确处理其中包含奇数字符的文件(如空格或其他语法中断值)。但是想进入的另一个习惯是引用所有变量引用(如$f),使用dbl-quotes:"$f",好吗? ;-)这是保护其中嵌入了空格等文件的其他内容。

编辑更新中,我已经对您的CTL_PATH和CTL_FILE进行了分类。我想我理解你的意图,你有1 std CTL_FILE,你通过sed来创建一个特定于表的.ctl文件(根据我的经验,这是一个很好的方法)。请注意,您无需使用cat将文件发送到sed,但您通过重定向(> $f.ctl)创建更改文件的用途非常shell - 也喜欢。

在第二次编辑更新中,我看了S.O.并找到了一个示例sqlldr cmdline,它具有正确的语法并已修改为可以使用您的变量名称。

完成,

  • 一个。您确定计算机上是否安装了Oracle客户端软件包 您正在运行脚本?

  • B中。 / path / to / oracle / client / tools / bin是否包含在您的工作中 $PATH

    • ℃。试试which sqlldr。如果你没有得到任何东西,或者不是 安装或不在路径中。

    • d。如果没有安装,你必须安装它。

    • 电子。安装后,请记下包含sqlldr cmd的目录。 find / -name 'sqlldr*'需要很长时间才能运行,但它会 打印出你想要使用的路径。

    • F。采取返回的“路径”部分(如
      /opt/oracle/11.2/client/bin/(但不是最后的sqlldr),和 使用

    • 编辑第二行的脚本

(添加Txt以安抚S.O. Formatter ;-))

export ORCL_PATH="/path/you/found/to/oracle/client"
export PATH="$ORCL_PATH:$PATH"

这些步骤应解决任何遗留问题。如果这不起作用,请查看是否有人在哪里工作,了解您的本地计算环境,可以帮助解释任何缺失或不同的步骤。

IHTH