Thread: Trigger para fazer log
Oi lista,
tenho um trigger que deve validar alguns campos para entrada/saida de funcionarios e que deve fazer um "log"
do que vai acontecendo.
Por exemplo:
quando é o início do expediente, o trigger deverá guardar algo assim no "log":
Cadastro da Entrada-1: Data 2003-02-06 Horário: 09:51:00
Se o funcionario tentar burlar o esquema e tentar inserir/atualizar o registro, o trigger deve guardar na tabela log que
foi feita essa tentativa e retornar um erro para o meu script PHP.
Meu problema:
no fim do trigger tenho o seguinte:
IF length(m_erro) = 0 THEN
ELSE
RAISE EXCEPTION ''%'', m_erro;
END IF;
RETURN null;
ELSE
RAISE EXCEPTION ''%'', m_erro;
END IF;
RETURN null;
Quando está "EXCEPTION", o que deveria ser guardado no "log" também é desfeito. Quando coloco "NOTICE", a
informação vai para o LOG.
Como fazer para o trigger gerar uma "EXCEPTION" e mesmo assim gravar em outra tabela?!?!
[]'s Mauricio
Maurício Sessue Otta wrote: > Oi lista, > > tenho um trigger que deve validar alguns campos para entrada/saida de > funcionarios e que deve fazer um "log" > do que vai acontecendo. > > Por exemplo: > quando é o início do expediente, o trigger deverá guardar algo assim no > "log": > Cadastro da Entrada-1: Data 2003-02-06 Horário: 09:51:00 > > Se o funcionario tentar burlar o esquema e tentar inserir/atualizar o > registro, o trigger deve guardar na tabela log que > foi feita essa tentativa e retornar um erro para o meu script PHP. > > Meu problema: > no fim do trigger tenho o seguinte: > IF length(m_erro) = 0 THEN > ELSE > RAISE EXCEPTION ''%'', m_erro; > END IF; > RETURN null; > Quando está "EXCEPTION", o que deveria ser guardado no "log" também é > desfeito. Quando coloco "NOTICE", a > informação vai para o LOG. > > Como fazer para o trigger gerar uma "EXCEPTION" e mesmo assim gravar em > outra tabela?!?! > > > []'s Mauricio I can't understand your language ;-) but I suppose, that after "RAISE EXCEPTION" you can't find any information in a log table? RAISE EXCEPTION always aborts transaction and you can't put any log information into tables when doing this. Regards, Tomasz Myrta
On Thu, Feb 06, 2003 at 10:06:32AM -0200, Maurício Sessue Otta wrote: > > Quando está "EXCEPTION", o que deveria ser guardado no "log" também é desfeito. Quando coloco "NOTICE", a > informação vai para o LOG. > > Como fazer para o trigger gerar uma "EXCEPTION" e mesmo assim gravar em outra tabela?!?! Não dá. Quando você levanta uma exceção (exception) o controle volta para quem chamou o gatilho. Não há como contornar, que eu saiba. Você tem que fazer a inserção na relação desejada antes de levantar a exceção (talvez chamando outra função que o faça). -Roberto P.S.: Tomaz, you understood his question correctly :-) -- +----| Roberto Mello - http://www.brasileiro.net/ |------+ + Computer Science Graduate Student, Utah State University + + USU Free Software & GNU/Linux Club - http://fslc.usu.edu/ + I'm not super man. But I am very dense.