Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Powód uzyskania ORA-01422:dokładne pobieranie zwraca więcej niż żądaną liczbę wierszy

Ten wyjątek jest wywoływany za każdym razem, gdy wykonywana jest instrukcja SELECT INTO i znajduje więcej niż jeden wiersz. Instrukcja SELECT INTO oczekuje, że znajdzie dokładnie jeden wiersz, ani mniej, ani więcej - w przeciwnym razie zgłaszany jest wyjątek.

W twoim przykładzie:

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

wydaje się, że na kombinację (WARTOŚĆ KLUCZY, KATEGORIA_FK) powinien przypadać tylko jeden wiersz, ale w rzeczywistości tak nie jest. Jeśli powinien być tylko jeden, tabela powinna mieć unikatowe ograniczenie dla tych kolumn:

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

To uniemożliwiłoby komuś (lub procesowi) ponowne dodanie tego samego wiersza. Oczywiście przed dodaniem tego ograniczenia konieczne byłoby usunięcie duplikatów tabeli.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:wydajność zbierania zbiorczego

  2. Samouczek dotyczący formularzy i raportów Oracle 9i, Oracle 10g i Oracle 11g Developer Suite

  3. uzyskiwanie listy rozdzielanej przecinkami w pobliżu „xx.yy” jest nieprawidłowe z dbms_utility.comma_to_table

  4. Październik 2014Procesor ulega awarii ArcGIS Desktop

  5. Alokacja pamięci Oracle JDBC podczas pobierania zestawu wyników