Oracle SQL*加载程序和生成的控制文件出现关键字错误

Oracle SQL*加载程序和生成的控制文件出现关键字错误,oracle,shell,unix,sql-loader,Oracle,Shell,Unix,Sql Loader,我是一个在shell脚本运行时动态创建控制文件的人,具有: echo 'LOAD DATA' > $CTLDIR/test.ctl echo 'TRUNCATE' >> $CTLDIR/test.ctl echo 'INTO TABLE TEMP' >> $CTLDIR/test.ctl echo 'FIELD

我是一个在shell脚本运行时动态创建控制文件的人,具有:

echo 'LOAD DATA'                             > $CTLDIR/test.ctl
echo 'TRUNCATE'                              >> $CTLDIR/test.ctl
echo 'INTO TABLE TEMP'                       >> $CTLDIR/test.ctl
echo 'FIELDS TERMINATED BY ","'              >> $CTLDIR/test.ctl
echo 'TRAILING NULLCOLS'                     >> $CTLDIR/test.ctl
echo '('                                     >> $CTLDIR/test.ctl
echo 'NO, '                                  >> $CTLDIR/test.ctl
echo 'I_NUM , '                              >> $CTLDIR/test.ctl
echo 'QTY  , '                               >> $CTLDIR/test.ctl
echo 'CREATE_DATETIME       SYSDATE'         >> $CTLDIR/test.ctl
echo ')'                                     >> $CTLDIR/test.ctl
当我执行shell脚本时,会出现错误“Expected keyword INTO,found keyword LOAD”

请帮助我解决此问题。

您的控制文件看起来正常。 如何使用SQL*加载器

您可以使用如下命令启动它:

sqlldr control=$CTLDIR/test.ctl userid=[username]/[password]@[connect string]

您还没有展示如何调用SQL*Loader,或者生成的控制文件实际上是什么样子的(尽管看起来应该没问题)。你做了什么调试?也许你可以显示整个脚本,以及运行它的输出,如果生成了日志文件,还可以显示一个日志文件。根据您在评论中显示的调用(请将其编辑到问题中),该调用看起来正常,因此可能您稍后在脚本中覆盖了控制文件,或者首先无法覆盖控制文件。需要更多信息。这就是我如何使用sqlldr$test control=$CTLDIR/test.ctl data=$INDIR/${fileName}log=$sqlldrLog。其中$test包含用户id/密码。这应该可以工作。您使用哪个版本的sql*加载器?$sqlldr testuser/testuser control=test.ctl data=test.data sql*加载器:11.2.0.2.0版-2015年6月16日12:48:44生产版权所有(c)1982年,2009年,Oracle和/或其附属公司。版权所有。已达到提交点-逻辑记录计数1