Pular para o conteúdo
  • Este tópico contém 7 respostas, 4 vozes e foi atualizado pela última vez 14 anos, 1 mês atrás por Avatar de leo_jfleo_jf.
Visualizando 8 posts - 1 até 8 (de 8 do total)
  • Autor
    Posts
  • #94955
    Avatar de leo_jfleo_jf
    Participante

      Bom 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 é valida

      #94956
      Avatar de fsitjafsitja
      Participante

        Olá,

        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.

        #94957
        Avatar de leo_jfleo_jf
        Participante

          Fala 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.

          #94958
          Avatar de Manoel872Manoel872
          Participante

            Utilize 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.

            #94959
            Avatar de leo_jfleo_jf
            Participante

              Galera,

              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.

              #94962
              Avatar de fsitjafsitja
              Participante

                Admito 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.

                #94965
                Avatar de burgaburga
                Participante

                  Acredito 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 1

                  Estou certo?

                  #94966
                  Avatar de leo_jfleo_jf
                  Participante

                    Fala 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]

                  Visualizando 8 posts - 1 até 8 (de 8 do total)
                  • Você deve fazer login para responder a este tópico.
                  plugins premium WordPress