0

我正在尝试为 Windows (XP) 创建一个批处理文件,它将有几个 sql,当它运行时它将 1. 与 oracle 连接 2. 设置用户 ID/密码/模式 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 并将输出获取到定义的文件。

请给我一些指导。

需要注意的一件事是 echo 正在打印,包括双引号。但如果我没有它们,那么它只会打印第一个单词而不是整个查询。

谢谢

4

2 回答 2

1

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

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

我建议创建一个 .sql 脚本而不是创建环境变量

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

@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
于 2012-04-03T20:15:19.883 回答
0

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

语法:sqlplus -s ora_user_name / ora_user_password [as sysdba]@ ora_sid @" path_to_sql_file " > output.log

前任。sqlplus -s scott/tiger@xe @"D:\Oralcle\scripts\sql_file.sql" > output.txt

于 2014-11-14T06:53:25.560 回答