Pular para o conteúdo

Fóruns Developer,Designer e Discoverer When-validate-item When-validate-item

#89330
Anônimo

    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