Oracle
 sql >> Database >  >> RDS >> Oracle

Motivo per ottenere ORA-01422:il recupero esatto restituisce un numero di righe superiore a quello richiesto

Questa eccezione viene sollevata ogni volta che un'istruzione SELECT INTO viene eseguita e trova più di una riga. Un'istruzione SELECT INTO prevede di trovare esattamente una riga, né più né meno, altrimenti viene sollevata un'eccezione.

Nel tuo esempio:

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

sembra che dovrebbe esserci solo una riga per combinazione (KEYVALUE, CATEGORY_FK), ma in realtà non è così. Se dovrebbe essercene solo una, la tabella dovrebbe avere un vincolo univoco su quelle colonne:

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

Ciò impedirebbe a qualcuno (o a qualche processo) di aggiungere nuovamente la stessa riga. Ovviamente dovresti deduplicare la tabella prima di poter aggiungere quel vincolo.