繁体   English   中英

Oracle 在 bat 文件中导入批处理文件

[英]Oracle import batch files within a bat file

我必须运行几个 bat 文件才能将大量数据导入 Oracle。 我只想运行一个 bat 文件。

批处理文件位于单独的子文件夹中,如下所示:

g:\1\import.bat
g:\2\import.bat
...
g:\n\import.bat

它们看起来像这样:

@echo off
REM Copyright (c) 1999-2004 by Intergraph Corporation. All Rights Reserved.
REM Use this script to create feature class tables via SQL and populate tables with SQL*Loader.
REM The GDOSYS schema is no longer created via this script. If you want metadata to be loaded,
REM GDOSYS needs to exist prior to running import. You may use Database Utilities to create GDOSYS.
REM If you are using a comma for a decimal separator, set the NLS_NUMERIC_CHARACTERS parameter:
REM SET NLS_NUMERIC_CHARACTERS=,.
if "%1"=="" goto usage
SQLPLUS %1> @"kat_ki_vectors_epulet_i_pre.sql"
SQLLDR %1 CONTROL='kat_ki_vectors_epulet_i'
SQLPLUS %1 @"kat_ki_vectors_epulet_i_post.sql"
goto end
: usage
echo SYNTAX:  "Import username/password@ConnectString" 
echo WHERE:
echo - username/password is the Oracle user account where the data will be loaded.
echo - ConnectString is the Oracle NET string used to connect to the Oracle server.
echo See the document "Working with GeoMedia Professional" for more
information.
echo EXAMPLES:
echo Import scott/tiger@db_orcl
: end 
pause

我试图用这个 bat 文件运行所有这些文件(使用正确的身份验证):

call g:\1\import.bat ###/###@###.##
call g:\2\import.bat ###/###@###.##
...
call g:\n\import.bat ###/###@###.##

但这就是我得到的:

G:\>do_the_trick.bat
G:\>call g:\1\import.bat ###/###@###.##
SQL*Plus: Release 11.1.0.6.0 - Production on K. Jan. 24 15:35:08 2017
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
Kapcsolódási cél:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options
SP2-0310: nem lehet megnyitni a(z) "kat_ki_vectors_epulet_i_pre.sql" fájlt

"Kapcsolódási cél" ---> "Connecting target"
"nem lehet megnyitni a(z) " ---> "Can not be opened"

但是如果我直接运行第一个bat文件

G:\1>import.bat ###/###@###.##

导入开始。

请给我一些尝试的提示!

这批应该可以工作,只需要设置最大可能的数量。 该批次将评估当前的最高数字。

@Echo off
CD /D "G:\"
:: first get the highest number increase if max > 1000
For /L %%N in (1,1,1000) Do If Exist "G:\%%N" (Set Max=%%N) Else Goto :Cont
:Cont
:: iterate through all numbered subdirs
For /L %%N in (1,1,%Max%) Do (
  Pushd "G:\%%N"
  Call import.bat ###/###@###.##
  PopD
)

要获取G:\\所有子目录,您可以使用

@Echo off
For /D %%A in (G:\*) Do (
  Pushd "%%~fA"
  Call import.bat ###/###@###.##  
  PopD
)

编辑另一个版本将(空)回声传送到 import.bat,因此无需手动确认。 它还检查是否存在 import.bat

@Echo off
Set App=Import.bat
Set Cred=###/###@###.##  
For /D %%A in (G:\*) Do (
  Pushd "%%~fA"
  If Exist %APP% Echo:|Call %App% %Cred%
  PopD
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM