- Este tópico contém 7 respostas, 4 vozes e foi atualizado pela última vez 14 anos, 1 mês atrás por
leo_jf.
-
AutorPosts
-
6 de julho de 2010 às 6:46 pm #94955
leo_jf
ParticipanteBom dia Senhores,
Preciso criar uma PROCEDURE, que ao final do processamento irá
gerar um aquivo rel.txt, com os seguintes criterios.Segue:
Tenho meu SELECT as informações
MATRICULA PERIODO TIPO_HR TOTAL_HORAS
10000 201001 5 8
10000 201001 5 5
10000 201001 6 4
10000 201002 5 3
10000 201002 6 1
10001 201001 1 3
10001 201002 2 2
10001 201002 3 1
… … .. ..
… … .. ..obs: tipo 5 é hora paga, e tipo 6 é hora não paga
No processamento tenho que quebrar por matricula.
Exemplo para matricula 10000 e 10001:
Abaixo seria o arquivo rel.txt:MATRICULA; PERIODO; HORA_PAGA; HORA_NAO_PAGA
10000 ; 201001 ; 13 ; 4
10000 ; 201002 ; 3 ; 1
10000 ; 201002 ; 3 ; 1
10000 ; 201002 ; 3 ; 1
10001 ; 201001 ; 1 ; 3
10001 ; 201002 ; 5 ; 3
… ; … ; … ; ..Alguém tem uma sugestão?
Qq ajuda é valida6 de julho de 2010 às 7:06 pm #94956fsitja
ParticipanteOlá,
Qual foi o problema que você encontrou?
Poste estrutura das tabelas envolvidas e dados de exemplo, se o problema é a aquisição dos dados delas com o layout correto. Fica mais fácil ajudar.
Se estiver encontrando algum erro poste a mensagem de erro completa e o trecho de código causando dificuldades, por gentileza.
Att,
Francisco.6 de julho de 2010 às 7:48 pm #94957leo_jf
ParticipanteFala Francisco,
Como postei. Não houve erros. Perguntei se alguém tinha uma dica de como criar bloco pl/sql que atenda essas caracteristicas que descrevi.
6 de julho de 2010 às 8:09 pm #94958Manoel872
ParticipanteUtilize o UTL_FILE.FILE_TYPE para criar o arquivo será necessário configurar um parâmetro no oracle para você criar o arquivo em um determinado diretório do servidor.
Att,
Manoel Jr.
6 de julho de 2010 às 9:28 pm #94959leo_jf
ParticipanteGalera,
Acho que vcs não entenderam bem o que perguntei.
Falei sobre a lógica para montar o vetor, e não sobre pacote utl_file.De qq forma, obrigado pelas respostas.
6 de julho de 2010 às 10:19 pm #94962fsitja
ParticipanteAdmito que não entendi… 😉
Por isso que pedi mais detalhamento sobre o problema: estrutura de tabelas, dados de exemplo e qual o resultado esperado para esse exemplo.A forma de fazer é só um meio para um fim. Há varias formas de se chegar no resultado que você quer. Por isso também não entendi a colocação sobre uso de vetores: usar vetores tem a ver com a solução, não com o problema, e no momento a minha dificuldade é entender o problema.
7 de julho de 2010 às 3:44 am #94965burga
ParticipanteAcredito que o que você está querendo é algo próximo disto:
WITH TABELA AS (
SELECT 10000 MATRICULA,201001 PERIODO,5 TIPO_HR, 8 TOTAL_HORAS FROM DUAL
UNION ALL
SELECT 10000, 201001 , 5 , 5 FROM DUAL
UNION ALL
SELECT 10000, 201001, 6, 4 FROM DUAL
UNION ALL
SELECT 10000, 201002, 5, 3 FROM DUAL
UNION ALL
SELECT 10000, 201002, 6, 1 FROM DUAL
UNION ALL
SELECT 10001, 201001, 1, 3 FROM DUAL
UNION ALL
SELECT 10001, 201002, 2, 2 FROM DUAL
UNION ALL
SELECT 10001, 201002, 3, 1 FROM DUAL
)
SELECT T1.MATRICULA, T1.PERIODO,
(SELECT SUM (T2.TOTAL_HORAS)
FROM TABELA T2
WHERE T1.MATRICULA = T2.MATRICULA
AND T1.PERIODO = T2.PERIODO
AND TIPO_HR = 5) HORA_PAGA,
(SELECT SUM (T2.TOTAL_HORAS)
FROM TABELA T2
WHERE T1.MATRICULA = T2.MATRICULA
AND T1.PERIODO = T2.PERIODO
AND TIPO_HR = 6) HORA_NAO_PAGA
FROM TABELA T1
GROUP BY T1.MATRICULA, T1.PERIODO;Resultado pros dados de exemplo que você nos passou:
MATRICULA PERIODO HORA_PAGA HORA_NAO_PAGA
----------------------|----------------------|----------------------|----------------------
10001 201002
10001 201001
10000 201001 13 4
10000 201002 3 1Estou certo?
7 de julho de 2010 às 6:12 am #94966leo_jf
ParticipanteFala Burga,
Exatamente isso. Que bom que entendeu rsrsr.
Acabei fazendo de outra forma: Criei um vetor e carreguei para memória. So que com isso ficou um pl/sql um pouco grande devido as condições.
Vou chegar amanha no trabalho, e testar essa solução. Se funcionar mudo para essa opção.
Vlw mesmo pela dica!
Precisando, só dizer.
[/i] -
AutorPosts
- Você deve fazer login para responder a este tópico.