Pular para o conteúdo
Visualizando 7 posts - 1 até 7 (de 7 do total)
  • Autor
    Posts
  • #94328
    leo_jf
    Participante

      Srs, tudo bom?
      Estou um pouco sumido, mas tudo blz!

      Preciso de uma pequena ajuda, se alguém puder me ajudar.
      Preciso criar, em bloco pl/sql, uma rotina para buscar quem teve
      acesso em determinado setor, em horário de trabalho, que não é permitido.
      Considerando que o acesso da TBL1 seria o acesso a catraca restrita, e esse acesso é registrado na tabela TBL1 da seguinte forma:
      cada acesso é gravado uma linha.
      E a TBL2 são os acesos de ponto, controlados por outro sistema, e tem a seguinte regra:
      o sistema monta vários pares.

      Tenho uma tabela com os registros:

      TBL1
      DATA HORARIO TIPO FUNCIONARIO
      31/05/2010 08:10 ENTRADA S100
      31/05/2010 08:50 SAIDA S100 …

      TBL2
      A tabela de ponto com os pares:

      DATA HORARIO_ENTRADA HORARIO_SAIDA FUNCIONARIO
      31/05/2010 08:05 17:10 S100
      31/05/2010 11:50 12:50 S100
      31/05/2010 17:10 19:50 S100 …

      No exemplo acima será gerado um txt mostrado que no dia 31/05/2010, teve uma
      irregulariedade, pois houve um acesso em um ambiente restrito às 08:10, entretanto
      o funcionario começou a trabalhar 08:05.

      #94329
      Avatar photoRegis Araujo
      Participante

        Fala Leo.. boa tarde..!

        Tenta explicar como que se pega uma irregularidade.. pois esta é a duvida.. como que identifica que houve irregularidade nos acessos..!!

        Abraços..!

        #94331
        burga
        Participante

          Quais os tipos destes campos de horarios?

          Se for varchar2, você pode coverter tudo pra data e fazer:

          select *
          from tbl1 join tbl2
          on tbl1.data = tbl2.data and tbl1.funcionario = tbl2.funcionario
          and to_date(tbl1.horario,'hh24:mi:ss')
          between to_date(tbl2.horario_entrada,'hh24:mi:ss')
          and to_date(tbl2.horario_saida,'hh24:mi:ss')
          where tbl1.tipo = 'ENTRADA';

          Algo assim, e jogar o resultado no arquivo usando utl_file.

          #94332
          leo_jf
          Participante

            Blz,
            Gte!

            Os horarios são number. Nem precisa alterar essa parte.
            E é considerado irregular quando há um acesso na tabela TBL1 durante o horario da TBL2.

            No exemplo que dei é exatemente um caso de irregular, pois o funcionario entrou na catraca às 08:10, mas bateu o ponto às 08:05, ou sejá so não seria irregular se fosse ao contrário:
            Veja novamente a tabela:

            TBL1
            DATA HORARIO TIPO FUNCIONARIO
            31/05/2010 08:10 ENTRADA S100
            31/05/2010 08:50 SAIDA S100 …

            TBL02

            DATA HORARIO_ENTRADA HORARIO_SAIDA FUNCIONARIO
            31/05/2010 08:05 17:10 S100
            31/05/2010 11:50 12:50 S100
            31/05/2010 17:10 19:50 S100 …

            Entenderam?

            #94333
            leo_jf
            Participante

              Resumindo:
              Tenho dois cursores distintos, e preciso para cada data testar os devidos pares : tabela 1 e tabela 2, para a partir disso saber
              se existe algum par (horario entrada e saida) na tabela 2, que exista no par da tabela 1, o que não pode acontecer.

              #94335
              Avatar photoRegis Araujo
              Participante

                Opa Leo..!

                Ve se isto ajuda..!!


                SELECT TBL1.FUNCIONARIO || ' ' || TBL1.TIPO || ' ' || TBL1.DATA || ' ' || TBL1.HORARIO AS "HORARIO_ENTRADA",
                TBL2.FUNCIONARIO || ' ' || TBL2.DATA || ' ' || TBL2.HORARIO_ENTRADA || ' '|| TBL2.HORARIO_SAIDA AS "HORARIO_BATIDA_PONTO"
                FROM TBL2, TBL1
                WHERE TBL2.FUNCIONARIO = TBL1.FUNCIONARIO
                AND TBL1.DATA = TBL2.DATA
                AND TO_CHAR(TBL1.DATA || ' ' || TBL1.HORARIO, 'DD/MM/YYYY HH24:MI:SS')
                BETWEEN TO_CHAR(TBL2.DATA || ' ' || TBL2.HORARIO_ENTRADA, 'DD/MM/YYYY HH24:MI:SS')
                AND TO_CHAR(TBL2.DATA || ' ' || TBL2.HORARIO_SAIDA, 'DD/MM/YYYY HH24:MI:SS');

                Fiz na correria aqui.. não sei se esta ultima concatenação esta certa..!!

                Neste select ele tras 2 informações distintas.. qualquer coisa a ideia é esta..

                Basta dar uma melhorada …!!

                Abraços..!

                #94342
                leo_jf
                Participante

                  Fala Thunder, blz?

                  Na verdade preciso, não sei bem como, criar um bloco pl/sql mesmo para ir testando os pares de uma tabela com outra tabela.
                  Tabela 01 e tabela 02.

                  Em Vb criei um vetor para ir testando (uma tabela em memoria).

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