- Este tópico contém 20 respostas, 3 vozes e foi atualizado pela última vez 17 anos atrás por
Rodrigo Mesquita.
- Você deve fazer login para responder a este tópico.
› Fóruns › Banco de dados Oracle › Criando um check no oracle
Esqueci de postar a solução, vou colocar para se no futuro alguém tiver a mesma dúvida.
Aproveitando dentro da trigger tem como pegar a tabela em vez de repetir o nome dela como eu fiz?
Abaixo segue como ficou a trigger.
CREATE OR REPLACE
TRIGGER TEST_TRIGGER
BEFORE INSERT ON TEST
FOR EACH ROW
declare
pragma autonomous_transaction;
total integer;
BEGIN
select count( :new.id_fk ) into total from test;
if total > 2
then
raise_application_error( -20005, 'testsjadjkasdhjsahdjsadjhsd' );
end if;
END;
Olá,
Basicamente o PRAGMA autonomous_transaction abre outra sessão no Oracle para a execução da sua query e com isso não entra em “conflito” com a trigger que ela mesma executa.
Como é outra “sessão” você tem que fazer a query como se fosse “outra tabela” mesmo sendo a mesma…
Ótimo trabalho!!
[]s Ishii
Valeu pelas ajudas e pela a explicação!!!!
😛 😛 😛 😛 😛
boa dica Ishii, porem o registro que está sendo inserido será “visto” nesse select já que ele abre outra sessão?
Olá,
Se for passado como parâmetro (:new.coluna) sim será visto, pois na verdade a “outra sessão” é apenas para evitar o Table is Mutating, em versões 8.0 e anteriores para resolver isso, só com empilhamento e com 2 ou 3 triggers…
[]s Ishii
opa… não tinha visto o :new.id_fk
valeu Ishii
abraço
› Fóruns › Banco de dados Oracle › Criando um check no oracle