在SQLLDR的批处理脚本中使用变量

在SQLLDR的批处理脚本中使用变量,sql,database,oracle,batch-file,Sql,Database,Oracle,Batch File,您好,我正在尝试在.bat文件中设置一个变量,我想在sqlldr代码中使用该变量来声明该文件(infle) 这是我的bat文件中关于变量的内容: set directroy_name= D:\Folder\Folder\Folder\File.csv 然后在我的命令文件中 load data infile '%directory_name%' 当我试图从命令提示符运行.bat文件时,我只收到SQL\u加载程序\u 500:无法操作文件(%directory\u name%.dat 我知道文件

您好,我正在尝试在.bat文件中设置一个变量,我想在sqlldr代码中使用该变量来声明该文件(infle)

这是我的bat文件中关于变量的内容:

set directroy_name= D:\Folder\Folder\Folder\File.csv
然后在我的命令文件中

load data
infile '%directory_name%'
当我试图从命令提示符运行.bat文件时,我只收到SQL\u加载程序\u 500:无法操作文件(%directory\u name%.dat

我知道文件在正确的位置吗


你知道为什么要这样做吗?

不,你不能这样做-你希望Oracle可执行文件理解Windows环境变量语法。如果这样做,它就必须在Unix中处理
$
变量,等等

您只需在命令行上传递文件名即可。在控制文件中,完全忽略
infle
,然后在调用SQL*Loader时添加一个:

假设您的变量只是一个奇怪的名称,并且有一个完整的文件路径,如您所示

如果它存在,那么,如果你想,我想你可以包含一个默认的固定值

您似乎还有输入错误;您设置了
directroy\u name
,但使用了
directory\u name
,这将没有任何值。您需要将其更改为:

set directory_name= D:\Folder\Folder\Folder\File.csv

@RichardC-是的。当然,它不必是一个变量,您可以在
DATA
参数中指定完整的文件路径,但我假设它正在脚本的其他地方使用。您可能希望以相同的方式设置
坏的
文件名等。谢谢您的帮助。我已经编辑了我的sqlldr命令:set directroy_name=D:\filename.csv sqlldr用户标识/password@databasecontrol=D:\file.sql log=D:\log.log DATA=%directory\u name%在我的命令文件中我遇到语法错误现在我删除了填充,它的内容是:将数据截断到以“,”结尾的表tablename字段中(colm1,coml2)当我从命令行运行.bat文件时,我刚刚收到命令行上的SQL*LOADER-100:syntax错误,没有告诉我任何细节和变量名不匹配的情况?您检查过吗?看起来您实际使用的变量将为空,这可能解释了该错误?变量的名称相同,设置如下:set directroy_name=D:\filename.csv并调用,sqlldr的结尾如下:DATA=%directroy_name%变量为空是什么意思?它应该是.cvs文件?
set directory_name= D:\Folder\Folder\Folder\File.csv