Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá galera tudo bom, to começando a mexer com oracle e preciso fazer uma trigger que valide a inserção de uma locadora, tenho a tabela do usuario que tem o campo que diz o maximo de locação que ele pode ter e estava fazendo um count na tabela de locação para ver o numero de locações que ele ja teve e a trigger entrar em ação essa hora, mas não está dando muito certo apesar de tudo, segue meu código.
>
create or replace
TRIGGER VALIDALOCACAO
BEFORE INSERT ON LOCACAO for each row
declare
maxSem number;
locacaoUsuario number :=0; select maxSemana into maxSem from usuario where usuario.idusuario = :NEW.idusuario ;
select count(idusuario) into locacaoUsuario
from locacao where (locacao.idusuario = :NEW.idusuario);
IF (locacaoUsuario > maxSem) THEN
begin
RAISE_APPLICATION_ERROR (-20001, 'Erro na Locação, por favor tente novamente');
ROLLBACK;
end;
END IF;
END;que tem horas que ela funciona normalmente, isso da a excessão na trigger e tem hrs q insere como se n tivesse nada...
vlw pela dica.
Veja se as aplicações fazem COMMIT ou seja não fica transação pendente.
Veja se o campo maxSemana tem valor, valores nulos não entrarão na condição do IF (serão sempre false)
Para garantir faça
nvl(maxSemana,0)
ou troque zero por um valor padrão de retiradas, 1 por exemplo.
Parece certa, qual o problema ?
=======================================
Dicas :
Para variaveis use uma notação como
vn_max_semana
vn_qtd_locacoes.
no "rasie" diga o erro
RAISE_APPLICATION_ERROR (-20001, 'Locação excedeu o limite !!');