Oracle
 sql >> база данни >  >> RDS >> Oracle

Причина за получаване на ORA-01422:точното извличане връща повече от заявения брой редове

Това изключение се предизвиква всеки път, когато се изпълни оператор SELECT INTO и се намери повече от един ред. Операторът SELECT INTO очаква да намери точно един ред, нито повече, нито по-малко - в противен случай се предизвиква изключение.

Във вашия пример:

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

изглежда, че трябва да има само един ред на (KEYVALUE, CATEGORY_FK) комбинация, но всъщност това не е така. Ако трябва да има само една, тогава таблицата трябва да има уникално ограничение за тези колони:

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

Това би попречило на някой (или някакъв процес) да добави отново същия ред. Разбира се, ще трябва да дедупликирате таблицата, преди да можете да добавите това ограничение.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL тригер за изглед

  2. Анти-съединяването по-ефективно ли е от лявото външно съединение?

  3. Как да получите пътя на йерархична таблица

  4. Изразът за регистър не работи правилно в sql заявка

  5. Предотвратяване на sqlplus съкращаване на имена на колони, без индивидуално форматиране на колони