如何将值传递到sqlloader-Oracle

如何将值传递到sqlloader-Oracle,oracle,batch-file,sql-loader,Oracle,Batch File,Sql Loader,我必须准备一些脚本来将数据导入Oracle数据库,但我必须在不同的数据库上运行它。 对于要导入的每个表,我都有一个数据和控制文件: table1.dat table1.ctl table2.dat table2.ctl etc.. 对于每个表,我都准备了运行sqlloader的单独.bat文件: 表1.1: sqlldr login/password@database control=table1.ctl log=table1.log 这是一个简单易行的解决方案,因为我不需要在不同的数据库

我必须准备一些脚本来将数据导入Oracle数据库,但我必须在不同的数据库上运行它。 对于要导入的每个表,我都有一个数据和控制文件:

table1.dat
table1.ctl
table2.dat
table2.ctl
etc..
对于每个表,我都准备了运行sqlloader的单独.bat文件:

表1.1:

sqlldr login/password@database control=table1.ctl log=table1.log 
这是一个简单易行的解决方案,因为我不需要在不同的数据库上运行它,也不需要更改登录凭据

我想做的是有一个带有登录名和密码的文件,为每个表运行加载脚本

你有什么建议吗

问候


帕维尔希望我能理解你的问题

在.bat文件中,您可以连接到任何数据库,但sqlldr登录将决定启动导入的数据库

我将在.bat文件中调用start.sql,在该文件中执行以下操作:

-- database 1
host sqlldr login/password@database1 control=table1.ctl log=table1_db1.log 
host sqlldr login/password@database1 control=table2.ctl log=table2_db1.log 

-- database 2
host sqlldr login/password@database2 control=table1.ctl log=table1_db2.log 
host sqlldr login/password@database2 control=table2.ctl log=table2_db2.log 
另一个选项是在开始文件中调用import_db1.sql,然后编写关于数据库1的代码,等等

start.sql

@@import_db1.sql
@@import_db2.sql
导入_db1.sql

-- database 1
host sqlldr login/password@database1 control=table1.ctl log=table1_db1.log data=csvfile.csv
host sqlldr login/password@database1 control=table2.ctl log=table2_db1.log data=csvfile.csv

等等。

您的问题不是很清楚,但是听起来您只是想为每台服务器提供用户名/密码。在这种情况下,对于bash,您可以执行以下操作:

. /dir/to/file/.sql_password_file
其中sql\u密码\u文件包含以下条目:

SQLLDRLOGON='user/pass'
然后在脚本中,您可以执行以下操作

sqlldr userid=$SQLLDRLOGON control=table1.ctl log=table1.log
我也会考虑把你的脚本改成循环

for load in table1 table2
do
loads="control=${load}.ctl bad=${load}.bad log=${load}.log"
sqlldr $SQLLDRLOGON $loads
etc...

这似乎试图在SQL*Plus中作为命令运行
sqlldr
。它是从O/s命令行运行的一个单独的可执行文件。您可以使用
host
调用,但仍然需要在这些命令中提供正确的凭据,因此我不确定这有什么帮助?您是对的@AlexPoole,host必须在答案中。我编辑了它。复制+粘贴并不总是足够;-)不过,我看不出运行SQL*Plus然后运行
host
会给这种情况增加什么—您只需在每个
host
调用中提供凭据即可。但是,我也不认为OP试图同时针对多个数据库运行脚本,问题似乎在于如何在运行时为单个数据库提供凭据,在可重用脚本中?所以您需要一个主
.bat
文件,该文件使用登录凭据设置一个变量,然后依次调用其他每个
.bat
文件,传递他们可以在各自的
sqlldr
命令中使用的变量?还是一个执行所有
sqlldr
调用的.bat文件,而不是每个表一个?