- Este tópico contém 3 respostas, 2 vozes e foi atualizado pela última vez 13 anos atrás por Anônimo.
-
AutorPosts
-
9 de janeiro de 2012 às 3:16 pm #102403Anô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 = cdgerenteDo 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.
9 de janeiro de 2012 às 10:09 pm #102411burgaParticipanteNa 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.
10 de janeiro de 2012 às 1:47 pm #102413AnônimoRicardo
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
2403E ele continua montando infinitamente assim. E todas as linhas traz 0.
Isso não é normal poderia ser alguma configuração do Oracle?10 de janeiro de 2012 às 2:18 pm #102414AnônimoPessoal
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? -
AutorPosts
- Você deve fazer login para responder a este tópico.