Detta undantag uppstår när en SELECT INTO-sats körs och hittar mer än en rad. En SELECT INTO-sats förväntar sig att hitta exakt en rad, varken mer eller mindre - annars höjs ett undantag.
I ditt exempel:
select PK into wsID from RPT_WEBSVC
where KEYVALUE = 'GetMachineNameList'
and category_fk = catID;
det verkar som att det bara ska finnas en rad per (KEYVALUE, CATEGORY_FK) kombination, men det är faktiskt inte fallet. Om det bara ska finnas en så bör tabellen ha en unik begränsning för dessa kolumner:
alter table RPT_WEBSVC add constraint RPT_WEBSVC_UK
unique (KEYVALUE, CATEGORY_FK);
Det skulle förhindra att någon (eller någon process) lägger till samma rad igen. Naturligtvis skulle du behöva deduplicera tabellen innan du kan lägga till den begränsningen.