Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Grund für ORA-01422:Exakter Abruf gibt mehr als die angeforderte Anzahl von Zeilen zurück

Diese Ausnahme wird ausgelöst, wenn eine SELECT INTO-Anweisung ausgeführt wird und mehr als eine Zeile findet. Eine SELECT INTO-Anweisung erwartet, genau eine Zeile zu finden, nicht mehr oder weniger - andernfalls wird eine Ausnahme ausgelöst.

In Ihrem Beispiel:

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

Es scheint, dass es nur eine Zeile pro (KEYVALUE, CATEGORY_FK)-Kombination geben sollte, aber das ist tatsächlich nicht der Fall. Wenn es nur eine geben sollte, sollte die Tabelle eine eindeutige Einschränkung für diese Spalten haben:

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

Das würde verhindern, dass jemand (oder ein Prozess) dieselbe Zeile erneut hinzufügt. Natürlich müssten Sie die Tabelle deduplizieren, bevor Sie diese Einschränkung hinzufügen könnten.