Pular para o conteúdo
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #102403
    Anônimo

      Olá

      Tenho uma tabela onde é montada a hierarquia da minha equipe de vendas. A estrutura dela é a seguinte:
      ano, mes, cdgerente, cdvendedor, nome.

      A PK é composta dos seguintes campos: ano, mes, cdgerente, cdvendedor.

      O porque desta composição é para ter o histórico de movimentação dos vendedores entre as gerências.

      Tenho a seguinte hierarquia: Gerente Nacional, Gerente Divisional, Gerente Regional, Gerente de Contas e Vendedores.
      Para montá-la estou usando o seguinte comando:

      SELECT cdsetor
      FROM equipe
      WHERE ano = 2012
      AND mes = 01
      START WITH cdgerente = 7
      CONNECT BY PRIOR cdvendedor = cdgerente

      Do gerente de contas para os vendedores está funcionando perfeitamente, mas a encrenca começa do regional para baixo. Nesse nível ele está triplicando a hierarquia e no nível de gerente nacional ele entra em looping.

      Pesquisei por cdgerente = cdvendedor ( 100, 100 ) e depois os vendedores desse 100 e por referência cruzada ( 100, 10 – 10, 100 ). Não encontrei nada.

      Faz três dias que estou nisso e não consigo encontrar o problema. Alguém poderia me dar uma ajuda?

      Muito obrigado.

      #102411
      Avatar de burgaburga
      Participante

        Na verdade pode acontecer de ter o loop da seguinte maneira:

        1 aponta pra 2, 2 aponta pra 3, 3 aponta pra 4, 4 aponta pra 1 denovo, aí você encontra o LOOP.

        Pra saber mais ou menos onde está ocorrendo o LOOP você pode fazer

        SELECT cdsetor,
        CONNECT_BY_ISCYCLE
        FROM equipe
        WHERE ano = 2012
        AND mes = 01
        START WITH cdgerente = 7
        CONNECT BY NOCYCLE PRIOR cdvendedor = cdgerente ;

        Onde retornar 1 na coluna CONNECT_BY_ISCYCLE significa que existe o LOOP.

        #102413
        Anônimo

          Ricardo

          Obrigado pelo reply.
          Testei o comando que você passou, mas não obtive nenhum resultado que me desse uma ideia do que está acontecendo.
          Nos testes que fiz era para ser retornado no máximo umas 150 linhas já estou listando a linha 2917 e não avistei nenhum número 1 no CONNECT_BY_ISCYCLE. Fora que a estrutura está repetindo.

          2999
          2001
          2002
          2003
          18
          2000
          2001
          2002
          2003
          2400
          2401
          2402
          2403
          18
          2000
          2001
          2002
          2003
          2400
          2401
          2402
          2403

          E ele continua montando infinitamente assim. E todas as linhas traz 0.
          Isso não é normal poderia ser alguma configuração do Oracle?

          #102414
          Anônimo

            Pessoal

            Fiz um teste e copiei apenas um mês para o banco de desenvolvimento. E o comando funcionou perfeitamente.
            A seleção no WHERE de ano e mês ele não distingue?

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