sql >> Base de Datos >  >> RDS >> Oracle

Motivo para obtener ORA-01422:la búsqueda exacta devuelve más del número de filas solicitado

Esta excepción se genera cada vez que se ejecuta una instrucción SELECT INTO y encuentra más de una fila. Una declaración SELECT INTO espera encontrar exactamente una fila, ni más ni menos; de lo contrario, se genera una excepción.

En tu ejemplo:

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

parece que solo debería haber una fila por combinación (KEYVALUE, CATEGORY_FK), pero de hecho ese no es el caso. Si solo debe haber uno, la tabla debe tener una restricción única en esas columnas:

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

Eso evitaría que alguien (o algún proceso) agregue la misma fila nuevamente. Por supuesto, necesitaría desduplicar la tabla antes de poder agregar esa restricción.