Je pense que votre logique était fondamentalement correcte. Voici deux améliorations. Tout d'abord, le niveau est incrémentiel afin que vous puissiez voir ce qui se passe avec la récursivité. Deuxièmement, il utilise une jointure explicite :
With BMStudy as (
select bm.ppn_i, bm.cpn_i, bm.bomname_i, bm.QUANTITY_I, 1 as BOMLevel
from BM010115 bm
where bm.PPN_I like '0123105-HWT' and bm.BOMNAME_I like ''
UNION ALL
select bb.ppn_i, ba.cpn_i, bb.bomname_i, ba.quantity_i, (BOMLevel + 1) as BOMLevel
from BMStudy ba join
BM010115 bb
on ba.cpn_i = bb.ppn_i
where bb.BOMNAME_I like ''
)
select * from BMStudy;
Je soupçonne que votre problème est la condition where bb.BOMNAME_I like ''
. Est-il possible que cette valeur soit vraiment NULL
plutôt que vide ?
Vous devriez également vérifier ce que fait cette requête non récursive d'un niveau :
select bb.ppn_i, ba.cpn_i, bb.bomname_i, ba.quantity_i, (BOMLevel + 1) as BOMLevel
from BM010115 ba join
BM010115 bb
on ba.cpn_i = bb.ppn_i
where bb.BOMNAME_I like '' and
(ba.PPN_I like '0123105-HWT' and ba.BOMNAME_I like '')