如何通过批处理文件使用 sqlplus 进行动态假脱机

How to do dynamic spool's using sqlplus by batch-file

我正在尝试使用单个 .sql 存档保存多个带有查询结果的 txt 存档,该存档由批处理文件调用以进行自动化工作。

我的批处理文件:

set d=%location%result.txt
set f=%location%result2.txt    
echo exit | sqlplus GOVMANPATCHORACLE/GOVMANPATCHORACLE@%SERVER%/%SERVICE% @C:\Users\enrique.erbs\Desktop\JOB\Tools\extrator_parametros\queryoracle.sql '%d%' '%f%'

*“%d%”包含保存到假脱机的语言环境

我的存档.sql (queryoracle.sql):

    SET PAGESIZE 50000
    SET LINESIZE   800
    SET VERIFY    OFF
    SET ECHO      ON
    SET HEAD      ON
    SET SERVEROUTPUT ON;
    SET PAGES     0
    SET DEFINE ON;
    COLUMN COD_PARAMETRO FORMAT a100 HEADING COD_PARAMETRO;
    COLUMN DES_PARAMETRO FORMAT a100 HEADING DES_PARAMETRO;
    COLUMN DES_VALOR FORMAT a100 HEADING DES_VALOR;
    DECLARE 
        myvar1 varchar2(30);
myvar2 varchar2(30);
    BEGIN
     myvar1 := '';
myvar2 := '';
    SPOOL 'myvar1'
    SELECT  TDFE_PARAMETRO_APLICACAO.COD_PARAMETRO AS COD_PARAMETRO, TDFE_PARAMETRO.DES_PARAMETRO AS DES_PARAMETRO, TDFE_PARAMETRO_APLICACAO.DES_VALOR AS DES_VALOR FROM TDFE_PARAMETRO_APLICACAO INNER JOIN TDFE_PARAMETRO ON(TDFE_PARAMETRO_APLICACAO.COD_PARAMETRO=TDFE_PARAMETRO.COD_PARAMETRO);
    SPOOL OFF
SPOOL 'myvar2'
    SELECT  * FROM TDFE_PARAMETRO_APLICACAO;
    SPOOL OFF
    END;

我尝试了一些选项,最接近获得我想要的结果的是在 sqlplus 调用结束时使用“>> %location%\result.txt”。

有人可以帮助我吗?

你一点也不远。实际上,当执行 SQLPLUS 并向他传递一个要执行的文件和参数时,它将用你的第一个参数替换 &1 的每一次出现,用你的第二个参数替换 &2 的每一次出现,等等...

这应该有效:

    SET PAGESIZE 50000
    SET LINESIZE   800
    SET VERIFY    OFF
    SET ECHO      ON
    SET HEAD      ON
    SET SERVEROUTPUT ON;
    SET PAGES     0
    SET DEFINE ON;

    COLUMN COD_PARAMETRO FORMAT a100 HEADING COD_PARAMETRO;
    COLUMN DES_PARAMETRO FORMAT a100 HEADING DES_PARAMETRO;
    COLUMN DES_VALOR FORMAT a100 HEADING DES_VALOR;

    SPOOL '&1'

    SELECT  TDFE_PARAMETRO_APLICACAO.COD_PARAMETRO AS COD_PARAMETRO, TDFE_PARAMETRO.DES_PARAMETRO AS DES_PARAMETRO, TDFE_PARAMETRO_APLICACAO.DES_VALOR AS DES_VALOR FROM TDFE_PARAMETRO_APLICACAO INNER JOIN TDFE_PARAMETRO ON(TDFE_PARAMETRO_APLICACAO.COD_PARAMETRO=TDFE_PARAMETRO.COD_PARAMETRO);

    SPOOL OFF
    SPOOL '&2'

    SELECT  * FROM TDFE_PARAMETRO_APLICACAO;

    SPOOL OFF

供参考:https://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_twelve044.htm#SQPUG127