Domanda

Sto cercando di selezionare un prodotto genitore e tutti i suoi prodotti figlio;esplodere la fattura dei materiali (BOM), se lo farai.Questo dovrebbe essere un compito abbastanza semplice, ma non ottengo il risultato atteso.

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

Mi aspetterei di vedere i seguenti risultati:

1 Serial1 ParentPart
2 Serial1 ChildPart1
2 Serial2 ChildPart2
.

.. Tuttavia, sto solo ottenendo la prima riga (genitore) restituito.

Nota: la tabella ha un tasto composito di PART_NO / SERIAL_NO, e come si può vedere da questo esempio, il genitore di solito eredita lo Serial_no da uno dei bambini.Non sono sicuro che nessuno di questi problemi dovrebbe complicare molto le cose, ma chiaramente qualcosa sta sbagliando.

Perché la mia query non è la perforazione attraverso la gerarchia completa?

È stato utile?

Soluzione

Un collega mi ha aiutato alla soluzione:

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

Tutti gli esempi che ho visto fare riferimento a tabelle con una semplice chiave.Con un tasto composito come questo, sì, devo specificare una relazione tra entrambe le colonne, ma ho anche bisogno della seconda parola chiave precedente:

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

My SQL è stato sintatticamente corretto, ma non per la query ho pensato di essere in esecuzione!

Altri suggerimenti

La mia ipotesi è che ciò limita il risultato solo il primo record.

AND part_no                = 'ParentPart'
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top