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

Raison pour obtenir ORA-01422 :la récupération exacte renvoie plus que le nombre de lignes demandé

Cette exception est déclenchée chaque fois qu'une instruction SELECT INTO est exécutée et trouve plusieurs lignes. Une instruction SELECT INTO s'attend à trouver exactement une ligne, ni plus ni moins - sinon une exception est levée.

Dans votre exemple :

select PK into wsID from RPT_WEBSVC
where KEYVALUE = 'GetMachineNameList'
and category_fk = catID;

il semble qu'il ne devrait y avoir qu'une seule ligne par combinaison (KEYVALUE, CATEGORY_FK), mais en fait ce n'est pas le cas. S'il ne doit y en avoir qu'un, la table doit avoir une contrainte unique sur ces colonnes :

alter table RPT_WEBSVC add constraint RPT_WEBSVC_UK
    unique (KEYVALUE, CATEGORY_FK);

Cela empêcherait quelqu'un (ou un processus) d'ajouter à nouveau la même ligne. Bien sûr, vous devrez dédupliquer la table avant de pouvoir ajouter cette contrainte.