Pular para o conteúdo

Fóruns SQL e PL/SQL Ajuda SQL Ajuda SQL

#87747
Miro
Participante

    vc colocou no script em cada seção uma data mas é a mesma data em todas so que quero rode a primeira data mostre o resultado, rode a segunda data e mostre o resultada e assim por diante

    [quote=”leo_jf”:305pc76g]Miro,
    1
    Fiz um exemplo como teste aqui e ta ok.
    Veja se consegue ai.
    Se conseguir, avisa.
    []s


    DECLARE
    /*


    Analista de Sistemas : Leonardo Novais
    Analista De Negócios : xxx
    Data Criação : xxx
    Funcionalidade : xxx


    /
    /
    Variáveis para processamento dos dados */

    v_dt_01 DATE := TO_DATE('01/07/2009','DD/MM/YYYY');
    v_dt_02 DATE := TO_DATE('02/07/2009','DD/MM/YYYY');
    v_dt_03 DATE := TO_DATE('03/07/2009','DD/MM/YYYY');
    v_dt_04 DATE := TO_DATE('04/07/2009','DD/MM/YYYY');
    v_dt_05 DATE := TO_DATE('05/07/2009','DD/MM/YYYY');

    /Area de contexto principal que irá buscar os dados/

    CURSOR c_Principal_Miro IS

    SELECT
    SELECT /*+ all_rows */ SUM
    (CASE
    WHEN (r034fun.datadm <= (v_dt_01)
    AND EXISTS (
    SELECT 1
    FROM vetorh.r038hfi
    WHERE r038hfi.numemp = r034fun.numemp
    AND r038hfi.tipcol = r034fun.tipcol
    AND r038hfi.numcad = r034fun.numcad
    AND r038hfi.datalt <= (v_dt_02))
    AND NOT EXISTS (
    SELECT 1
    FROM vetorh.r038afa
    WHERE r038afa.numemp = r034fun.numemp
    AND r038afa.tipcol = r034fun.tipcol
    AND r038afa.numcad = r034fun.numcad
    AND r038afa.datafa =
    (SELECT MAX (r038afa.datafa)
    FROM vetorh.r038afa, vetorh.r010sit
    WHERE r038afa.numemp = r034fun.numemp
    AND r038afa.tipcol = r034fun.tipcol
    AND r038afa.numcad = r034fun.numcad
    AND r038afa.datafa <= (v_dt_03)
    AND r038afa.sitafa = r010sit.codsit
    AND r010sit.tipsit = 7))
    AND r038hsa.datalt =
    (SELECT MAX (datalt)
    FROM vetorh.r038hsa tab3
    WHERE tab3.numemp = r038hsa.numemp
    AND tab3.tipcol = r038hsa.tipcol
    AND tab3.numcad = r038hsa.numcad
    AND tab3.datalt <= v_dt_04)
    AND r038hsa.valsal =
    (SELECT MAX (valsal)
    FROM vetorh.r038hsa tab4
    WHERE tab4.numemp = r038hsa.numemp
    AND tab4.tipcol = r038hsa.tipcol
    AND tab4.numcad = r038hsa.numcad
    AND tab4.datalt <= v_dt_05)
    )
    THEN (r038hsa.valsal)
    END
    ) resultado
    FROM vetorh.r034fun,
    vetorh.r016hie,
    vetorh.r010sit,
    vetorh.r038hsa,
    vetorh.r016orn
    WHERE r034fun.sitafa = r010sit.codsit
    AND r034fun.taborg = r016orn.taborg
    AND r034fun.numloc = r016orn.numloc
    AND r016hie.taborg = r016orn.taborg
    AND r016hie.numloc = r016orn.numloc
    AND r038hsa.numemp = r034fun.numemp
    AND r038hsa.tipcol = r034fun.tipcol
    AND r038hsa.numcad = r034fun.numcad
    AND r034fun.numemp IN (1, 2)
    AND r034fun.tipcol = 1
    AND r034fun.tipcon = 1;

    BEGIN

    EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_FORMAT = "DD/MM/YYYY"';

    DBMS_OUTPUT.ENABLE(2000000);

    --Area do Unix que irá gravar o arquivo txt com a saida dos dados
    v_diretorio := '/diretorio/diretorio2';

    --Nome do arquivo que sera gerado.
    v_out := 'Miro_' || TO_CHAR(SYSDATE, 'YYYYMMDD') || '.txt';
    v_arq := UTL_FILE.FOPEN(v_diretorio, v_out, 'W');

    --Abre o cursor para processamento
    FOR reg_Principal_Miro IN c_Principal_Miro LOOP

    v_line := RPAD(reg_Principal_Miro.resultado, 50);

    UTL_FILE.PUT_LINE(v_arq, v_line);

    END LOOP; --fim do loop para busca dos dados do cursor Principal_Miro

    UTL_FILE.FCLOSE(v_arq);

    --Tratamento das exceções, caso ocorram.

    EXCEPTION
    
        WHEN UTL_FILE.INVALID_PATH THEN
            DBMS_OUTPUT.PUT_LINE('Caminho inválido para gravação do arquivo *.txt');
            UTL_FILE.FCLOSE(v_arq);
    
        WHEN UTL_FILE.READ_ERROR THEN
            DBMS_OUTPUT.PUT_LINE('Erro durante a leitura.');
            UTL_FILE.FCLOSE(v_arq);
    
        WHEN UTL_FILE.WRITE_ERROR THEN
            DBMS_OUTPUT.PUT_LINE('Erro durante a escrita.');
            UTL_FILE.FCLOSE(v_arq);
    
        WHEN UTL_FILE.ACCESS_DENIED THEN
            DBMS_OUTPUT.PUT_LINE('Acesso ao arquivo negado - Consultar privilégios.');
            UTL_FILE.FCLOSE(v_arq);
    
        WHEN UTL_FILE.FILE_OPEN THEN
            DBMS_OUTPUT.PUT_LINE('Arquivo já esta aberto para processamento.');
            UTL_FILE.FCLOSE(v_arq);
    
        WHEN UTL_FILE.INVALID_MAXLINESIZE THEN
            DBMS_OUTPUT.PUT_LINE('Limite de linha excedeu os 32K - Consultar DBA.');
            UTL_FILE.FCLOSE(v_arq);
    
        WHEN UTL_FILE.INTERNAL_ERROR THEN
            DBMS_OUTPUT.PUT_LINE('Erro interno do Oracle.');
            UTL_FILE.FCLOSE(v_arq);  
    
        WHEN OTHERS THEN
            DBMS_OUTPUT.PUT_LINE('Erro não tratado.Consultar Analista Responsável ' || 
            TRANSLATE(SUBSTR(SQLERRM,1,100),'()','  '));
            UTL_FILE.FCLOSE(v_arq);
    

    END;
    /
    EXIT;
    [/quote]