首页 文章

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

提问于
浏览
0

我正在尝试为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 回答

  • 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
    
  • 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

相关问题