如何将值传递给sqlloader - Oracle

时间:2016-03-21 10:36:34

标签: oracle batch-file sql-loader

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

table1.dat
table1.ctl
table2.dat
table2.ctl
etc..

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

table1.bat:

sqlldr login/password@database control=table1.ctl log=table1.log 

这是一个简单易用的解决方案,因为我不需要在不同的数据库上运行它并更改登录凭据。

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

你有什么建议吗?

此致

的Pawel

2 个答案:

答案 0 :(得分:0)

我希望我理解你的问题。

在.bat文件中,您可以连接到任何数据库,但是sqlldr login会决定导入的数据库。

我会在.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

import_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

答案 1 :(得分:0)

您的问题不是很清楚,但听起来您只想为每台服务器提供用户名/密码。对于bash,你可以这样做:

. /dir/to/file/.sql_password_file

其中sql_password_file包含条目:

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...