DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Fórum DevMedia


Autor
Mensagem
SALOMÃO
 

País: Brasil
Estado: ES
Cidade: VILA VELHA
Mensagens: 4
 Postado em: 30/5/2011 3:24:19 PM

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;

Deivison
 

País: Brasil
Estado: PE
Cidade: x
Mensagens: 118
 Postado em: 30/5/2011 5:41:36 PM
CREATE OR REPLACE
TRIGGER
BEFORE--AFTER
INSERT OR DELETE OR UPDATE
 --OF <list of columns>
ON --<table name>
FOR EACH ROW
--WHEN <condition>
DECLARE
 
BEGIN
 
EXCEPTION
  WHEN Others THEN
    NULL; /*Se fizer isso os erros não faram nada!!!!*/
END;

 
SALOMÃO
 

País: Brasil
Estado: ES
Cidade: VILA VELHA
Mensagens: 4
 Postado em: 31/5/2011 7:46:53 AM

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.  


 
Renan Diego Alves
 

País: Brasil
Estado: SP
Cidade: Americana
Mensagens: 2
 Postado em: 8/6/2011 4:51:22 PM
Especifique o tipo de erro que você quer tratar, tipo "no_data_found" ou "division_by_zero" por exemplo...

 
SALOMÃO
 

País: Brasil
Estado: ES
Cidade: VILA VELHA
Mensagens: 4
 Postado em: 9/6/2011 7:35:00 AM
Como por exemplo: "no_data_found"

 
Renan Diego Alves
 

País: Brasil
Estado: SP
Cidade: Americana
Mensagens: 2
 Postado em: 15/6/2011 9:39:55 AM
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;



 
PEDRO ZATTA
 

País: Brasil
Estado: SP
Cidade: SAO PAULO
Mensagens: 1
 Postado em: 7/9/2011 12:36:09 PM
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.
 

 
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03