使用批处理脚本连接到oracle db运行select命令并将所有数据输出到平面文件

时间:2012-04-03 19:39:23

标签: oracle batch-file

我正在尝试为Windows(XP)创建一个批处理文件,它将有几个sqls,当它运行时它会 1.连接oracle 2.设置用户标识/密码/模式 3.在循环中运行每个sql 4.将每个sql输出输出到自己的平面文件。

我已经启动了脚本

@ECHO off

SET STATE=fl
TABLE1=AGENCY
set SQL1="SELECT Column_ID||CHR(31)||column_ENTITY_CD||CHR(31) FROM AGENCY"
set TABLE2=FIRM
set SQL2="SELECT  Column_ID||CHR(31)||Column_NM||CHR(31) FROM FIRM"
set TABLE3=FL_CO_LOB
Set SQL3="SELECT Column_ID||CHR(31)||Column_LOB_CODE||CHR(31) FROM FL_CO_LOB"
...
SET NumberOfTables=19
SETLOCAL ENABLEDELAYEDEXPANSION


 FOR /l %%A IN (1,1,%NumberOfTables%) DO (

    echo !SQL%%A!


  )
 endlocal

我可以从变量中获取SQL,但是没有任何线索如何连接到oracle并运行sql并将输出输出到定义的文件。

请给我一些指示。

有一点需要注意,回声是打印包括双引号。但如果我没有它们那么它只打印第一个单词而不是整个查询。

由于

2 个答案:

答案 0 :(得分:1)

如果您已在工作站上安装了oracle客户端,则可以使用SQLPlus.exe将命令行与数据库配合使用。您的TNSNAMES.ORA文件需要是最新的,并且tnsping需要能够找到您的服务。

我认为你需要改变你的方法。您要运行的脚本需要提供给SQLPlus.exe程序,而不是以半交互方式提供。

我建议创建.sql脚本而不是创建evnironment变量

您的批处理文件行可能如下所示:

@ECHO off

SET STATE=fl
set TABLE1=AGENCY
set TABLE2=FIRM

echo SELECT Column_ID^|^|CHR(31)^|^|column_ENTITY_CD^|^|CHR(31) FROM %TABLE1% > tablecommands.sql
echo SELECT  Column_ID^|^|CHR(31)^|^|Column_NM^|^|CHR(31) FROM %TABLE2% >> tablecommands.sql
echo SELECT Column_ID^|^|CHR(31)^|^|Column_LOB_CODE^|^|CHR(31) FROM FL_CO_LOB >> tablecommands.sql
...
<until your 19 SQL statements are declared>



SQLPlus User/Password@Database @tablecommands.sql

答案 1 :(得分:0)

在批处理文件中的sql命令之前添加sqlplus login命令。它执行并写入批处理文件所在的日志文件

语法:sqlplus -s ora_user_name / ora_user_password [as sysdba] @ ora_sid @“ path_to_sql_file ”&gt ; output.log

离。 sqlplus -s scott / tiger @ xe @“D:\ Oralcle \ scripts \ sql_file.sql”&gt; output.txt的