Erreur ORA-01427 single-row subquery returns more than one row
L'update en question était le suivant:
update refech e set daech=( select distinct m.action_date from maturities m where m.ubix_contract_code=e.corex and m.cmech=e.cmech and m.caech=e.caech and m.action in ('LTD','XD') ) where e.corig='FOW';
Le développeur avait bien compris que l'erreur était dû au fait que la clause select dans l'update retournait plus d'une ligne pour un match dans la table REFECH mais n'arrivait pas à identifier ces doublons.
Voici la requête qui permet ici d'avoir les lignes dans la table MATURITIES qui retournent plus d'une ligne dans la jointure avec REFECH effectuée dans l'update:
select count(1), m.ubix_contract_code,e.corex, m.cmech, e.cmech,m.caech,e.caech from maturities m, refech e where m.ubix_contract_code=e.corex and m.cmech=e.cmech and m.caech=e.caech and m.action in ('LTD','XD') and e.corig='FOW' group by m.ubix_contract_code, e.corex, m.cmech, e.cmech,m.caech,e.caech having count(1)>1
Le principe ici consiste à joindre les 2 tables selon les critères utilisés dans l'update et de regrouper les lignes selon ces critères en n'affichant que les lignes ayant plus d'une occurrence.
Une fois les doublons récupérés il est facile de régler le problème (suppression des doublons, ajout d'une clause de jointure oubliée etc.)
Aucun commentaire:
Enregistrer un commentaire