› Fóruns › Developer,Designer e Discoverer › When-validate-item › When-validate-item
Lelo, boa noite.
A melhor maneira para se validar é utilizando a trigger WHEN-VALIDATE-ITEM.
A ideia do seu código é boa, mas tem alguns erros:
Quando vc usa o comando COUNT(), tem que ter em mente que nunca cairá na exception NO_DATA_FOUND, pois este comando sempre retorna registro, ou seja, mesmo que não encontre nenhum registro que satisfaça a condição do WHERE, o SELECT COUNT(1) retornará 0 (ZERO), entendeu? Então, ou vc usa o COUNT() e logo abaixo da query faz uma validação para verificar se retornou ZERO ou vc usa um select sem COUNT e trata com a exception NO_DATA_FOUND, exemplos:
1) Utilizando o COUNT:
declare
l_contador number := 0;
begin
select count(1)
into l_contador
from RAMO_CARAC_BEM_SEGURADO
where cd_tipo_bem_segurado = :radesc.cd_tipo_bem_segurado;
—
if l_contador = 0 then
mensagem (‘Tipo Bem Segurado não Cadastrado.’);
raise form_trigger_failure;
end if;
exception
when others then
mensagem (‘Problemas ao Selecionar Registro em TIPO_BEM_SEGURADO. Erro: ‘||sqlerrm||’ – (when-validate-item – controle.cd_tipo_bem_segurado).’);
raise form_trigger_failure;
end;
2) Não utilizando o COUNT:
declare
l_validacao number;
begin
select 1
into l_validacao
from RAMO_CARAC_BEM_SEGURADO
where cd_tipo_bem_segurado = :radesc.cd_tipo_bem_segurado
and rownum < 2;
exception
when no_data_found then
mensagem ('Tipo Bem Segurado não Cadastrado.');
raise form_trigger_failure;
when others then
mensagem ('Problemas ao Selecionar Registro em TIPO_BEM_SEGURADO. Erro: '||sqlerrm||' – (when-validate-item – controle.cd_tipo_bem_segurado).');
raise form_trigger_failure;
end;
Utilizei o ROWNUM na segunda opção, pois caso esta tabela não tenha validação de chave primária, vc não terá problemas com retorno de mais de 1 registro.
Entendeu?
Abs