我正在尝试为Windows(XP)创建一个批处理文件,它将有几个sqls,当它运行时它将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并将输出获取到已定义的文件 .
请给我一些指示 .
有一点需要注意,回声是打印包括双引号 . 但如果我没有它们那么只打印第一个单词而不是整个查询 .
谢谢
2 回答
如果您已在工作站上安装了oracle客户端,则可以使用SQLPlus.exe将命令行与数据库配合使用 . 您的TNSNAMES.ORA文件需要是最新的,并且tnsping需要能够找到您的服务 .
我想你需要改变你的方法 . 您要运行的脚本需要提供给SQLPlus.exe程序,而不是以半交互方式提供 .
我建议创建.sql脚本而不是创建evnironment变量
您的批处理文件行可能如下所示:
在批处理文件中的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