Pergunta

Estou tentando selecionar um produto pai e todos os seus produtos filhos;explodir a lista de materiais (BoM), se desejar.Esta deveria ser uma tarefa bastante simples, mas não estou obtendo o resultado esperado.

SELECT LEVEL,
   serial_no,
   part_no
FROM ifsapp.part_serial_catalog_tab
   START WITH serial_no       = 'Serial1'
   AND part_no                = 'ParentPart'
   CONNECT BY PRIOR serial_no = superior_serial_no
   AND part_no                = superior_part_no;

Eu esperaria ver os seguintes resultados:

1 Serial1 ParentPart
2 Serial1 ChildPart1
2 Serial2 ChildPart2

..no entanto, estou recebendo apenas a primeira linha (pai) retornada.

OBSERVAÇÃO:A tabela tem uma chave composta de número_de_peça/número_de_série e, como você pode ver neste exemplo, o pai geralmente herda o número_de_série de um dos filhos.Não tenho certeza de que qualquer uma dessas questões deva complicar muito as coisas, mas é evidente que algo está errado.

Por que minha consulta não está detalhando toda a hierarquia?

Foi útil?

Solução

Um colega me ajudou na solução:

SELECT LEVEL,
   serial_no,
   part_no
FROM ifsapp.part_serial_catalog_tab
   START WITH serial_no       = 'Serial1'
   AND part_no                = 'ParentPart'
   CONNECT BY PRIOR serial_no = superior_serial_no
   AND PRIOR part_no          = superior_part_no;

Todos os exemplos que vi referem-se a tabelas com chave simples.Com uma chave composta como esta, sim, preciso especificar um relacionamento entre as duas colunas, mas também preciso da segunda palavra-chave PRIOR:

   CONNECT BY PRIOR serial_no = superior_serial_no
   AND PRIOR part_no          = superior_part_no;

Meu SQL estava sintaticamente correto, mas não para a consulta que pensei estar executando!

Outras dicas

Meu palpite é que isso restringe o resultado apenas ao primeiro registro.

AND part_no                = 'ParentPart'
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top