› Fóruns › SQL e PL/SQL › Ajuda SQL › Ajuda SQL
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]