この例外は、SELECT INTOステートメントが実行され、複数の行が見つかった場合に発生します。 SELECT INTOステートメントは、多かれ少なかれ、正確に1つの行を見つけることを想定しています。それ以外の場合は、例外が発生します。
あなたの例では:
select PK into wsID from RPT_WEBSVC
where KEYVALUE = 'GetMachineNameList'
and category_fk = catID;
(KEYVALUE、CATEGORY_FK)の組み合わせごとに1つの行しかないように見えますが、実際にはそうではありません。 1つしかない場合は、テーブルにそれらの列に一意の制約を設定する必要があります。
alter table RPT_WEBSVC add constraint RPT_WEBSVC_UK
unique (KEYVALUE, CATEGORY_FK);
これにより、誰か(または何らかのプロセス)が同じ行を再度追加するのを防ぐことができます。もちろん、その制約を追加する前に、テーブルの重複を排除する必要があります。