Как сделать динамический спул с использованием sqlplus с помощью пакетного файла - PullRequest
2 голосов
/ 25 марта 2019

Я пытаюсь сохранить несколько текстовых архивов с результатом запроса, используя один архив .sql, вызываемый пакетным файлом для автоматизации работы.

Мой пакетный файл:

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 := '$1';
myvar2 := '$2';
    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;

Я попробовал несколько вариантов и самый близкий, чтобы получить результат, который я хочу, используя ">>% location% \ result.txt" в конце вызова sqlplus.

Кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 25 марта 2019

Ты совсем недалеко.На самом деле, при выполнении 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

...