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.