如何将值传递到sqlloader-Oracle
我必须准备一些脚本来将数据导入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 这是一个简单易行的解决方案,因为我不需要在不同的数据库
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文件,而不是每个表一个?