Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Motivo para obter ORA-01422:a busca exata retorna mais do que o número de linhas solicitado


Essa exceção é gerada sempre que uma instrução SELECT INTO é executada e encontra mais de uma linha. Uma instrução SELECT INTO espera encontrar exatamente uma linha, nem mais nem menos - caso contrário, uma exceção é gerada.

No seu exemplo:
select PK into wsID from RPT_WEBSVC
where KEYVALUE = 'GetMachineNameList'
and category_fk = catID;

parece que deve haver apenas uma linha por combinação (KEYVALUE, CATEGORY_FK), mas na verdade esse não é o caso. Se houver apenas um, a tabela deverá ter uma restrição exclusiva nessas colunas:
alter table RPT_WEBSVC add constraint RPT_WEBSVC_UK
    unique (KEYVALUE, CATEGORY_FK);

Isso impediria que alguém (ou algum processo) adicionasse a mesma linha novamente. É claro que você precisaria desduplicar a tabela antes de poder adicionar essa restrição.