Autor
Mensagem
Tratamento de erro no TRIGGER.
Necessito fazer um tratamento de erro (exceção) e após o tratamento continue o procedimento.
O tratamento da exceção eu sei fazer o que não sei é tratar o erro e continuar o fluxo do trigger.
Código
Exception xxxxxxxxxxxx then
Tratamento do erro;
Continua o código.
End;
Agradeço, mas dessa forma o fluxo do procedimento será desviado quando ocorrer qualquer exceção no código e finaliza o processo, até aí eu sei fazer.
O que realmente preciso é quando ocorrer uma exceção em um bloco do código tratar no bloco e continuar o fluxo do procedimento.
Bom dia, fiz em um bloco anônimo mas você pode inserir na trigger que você precisa,
você pode usar o :new.nome_da_coluna para insert ou update
ou o :old.nome_da_coluna para update ou delete.
Não sei se é exatamente isso que você precisa, mas segue um exemplo:
declare
v_cep number;
begin
--busca o cep na t_cidades;
select cep into v_cep
from t_cidades
where id_cidade = 410;
exception when no_data_found then
--caso nao encontra no id_cidade=410, atribui 13000000 ao cep;
v_cep := 13000000;
end;
OU
declare
v_cep number;
begin
--busca o cep na t_cidades;
select cep into v_cep
from t_cidades
where id_cidade = 410;
exception when no_data_found then
--caso nao encontra no id_cidade=410, atribui o cep da cidade que tem o id = 1;
select cep into v_cep
from t_cidades
where id_cidade = 1;
end;
você pode usar o :new.nome_da_coluna para insert ou update
ou o :old.nome_da_coluna para update ou delete.
Não sei se é exatamente isso que você precisa, mas segue um exemplo:
declare
v_cep number;
begin
--busca o cep na t_cidades;
select cep into v_cep
from t_cidades
where id_cidade = 410;
exception when no_data_found then
--caso nao encontra no id_cidade=410, atribui 13000000 ao cep;
v_cep := 13000000;
end;
OU
declare
v_cep number;
begin
--busca o cep na t_cidades;
select cep into v_cep
from t_cidades
where id_cidade = 410;
exception when no_data_found then
--caso nao encontra no id_cidade=410, atribui o cep da cidade que tem o id = 1;
select cep into v_cep
from t_cidades
where id_cidade = 1;
end;
Salomão,
Dentro da trigger você pode utilizar quantos blocos "Begin Exception End" precisar, por exemplo, você pode colocar o insert dentro de um bloco "begin Exception", e no bloco "Exception End" você coloca o código alternativo. Mesmo o bloco "Exception End" pode gerar uma nova exceção, então dentro dele você pode colocar outro bloco "Begin Exception End".
Claro que se você aninhar muitos blocos "Begin Exception End" seu codigo vai ficar ruim, mas vai funcionar. Explique melhor o que você precisa fazer, e te ajudamos a montar o codigo.





