Oracle
 sql >> Base de données >  >> RDS >> Oracle

Syntaxe SQL pour la requête de mise à jour avec connexion préalable

La requête hiérarchique ne fonctionne qu'avec SELECT. Cela ne fonctionne pas avec UPDATE (je suis d'accord que ça pourrait être bien si c'était le cas).

Voici ce que vous pouvez faire :

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

Notez l'ordre des colonnes connect by prior ID = PARENT_ID . Normalement, nous voulons parcourir l'arborescence à partir de la ligne START WITH, ce que j'ai fait. Votre commande connect by prior PARENT_ID = ID remonte l'arbre de 12345 à ses parents, grands-parents, etc. Si c'est ce que vous voulez, changez le connect by clause de retour.