我正在尝试为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并将输出输出到定义的文件。
请给我一些指示。有一点需要注意,回声是打印包括双引号。但如果我没有它们那么它只打印第一个单词而不是整个查询。
由于
答案 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的