DBAtlas · Atlas d'exploitation des bases de données

ORA-01427: single-row subquery returns more than one row (une sous-requête mono-ligne renvoie plusieurs lignes)

Oracle

Que signifie cette erreur ?

Une sous-requête censée renvoyer une seule ligne en a renvoyé plusieurs. Par exemple, la sous-requête à droite d'une comparaison d'égalité (=) a produit plusieurs valeurs.

Cause

Sous-requête renvoyant plusieurs lignes là où = ou une affectation est attendu ; condition WHERE insuffisamment restrictive ; correspondance non unique dans la corrélation ; sous-requête scalaire de la liste SELECT renvoyant plusieurs lignes.

Comment la corriger

Restreignez la sous-requête pour qu'elle renvoie une seule ligne (WHERE supplémentaire, clé unique). Si plusieurs valeurs sont réellement attendues, utilisez IN au lieu de = : WHERE id IN (SELECT id FROM ...). Ou ajoutez une agrégation à la sous-requête (MAX, MIN), ou réduisez-la à une ligne avec ROWNUM = 1. Exécutez d'abord la sous-requête seule et vérifiez combien de lignes elle renvoie.

Ouvrir dans DBAtlas →

Autres entrées pour ce moteur