Oracle
 sql >> Database >  >> RDS >> Oracle

Sintassi SQL per query di aggiornamento con connessione tramite prior

La query gerarchica funziona solo con SELECT. Non funziona con UPDATE (sono d'accordo che potrebbe essere pulito se lo facesse).

Quindi quello che puoi fare è questo:

update HTABLE 
set status = 'INACTIVE'
WHERE STATUS <> 'CLOSE'
and id in ( select c.id
            from htable
            connect by prior ID = PARENT_ID 
            start with PARENT_ID = 12345);

Nota l'ordine delle colonne connect by prior ID = PARENT_ID . Normalmente vogliamo scendere dall'albero dalla riga START WITH, che è quello che ho fatto. Il tuo ordine connect by prior PARENT_ID = ID sale sull'albero dal 12345 ai suoi genitori, nonni, ecc. Se è quello che vuoi, cambia il connect by clausola indietro.