[firebase-br] Trigger : Do instead

Mário Reis mariodosreyx em gmail.com
Qua Ago 27 06:42:53 -03 2008


Ainda relativo a um "Estorno"

Tanto quanto me lembro no Oracle e no PostGres temos qq coisa como "Do instead 
of..." DELETE. Aqui não de forma que pus-me a inventar qual a melhor forma de
eliminar uma linha sem ralmente a eliminar,i.e., fazendo insert de uma nova
c/valores*-1
 
/*1.ºo registo acabado de eliminar para para Tabela de Historico */
Insert into <Historico_T1> (Campo_ID1....,Val1,Val2,Val3, Sign, Status, Visible)
Values(OLD.Field_ID1,....Old.Val1,Old.Val2,Old.Val3,'+','INS', 'Y')
 
/*2.ºht Insert do Velho simulando que realmente não foi apagado */
Insert into <Tabela_T1> (Campo_ID1....,Val1,Val2,Val3, Sign, Status)
Values(OLD.Field_ID1,....Old.Val1,Old.Val2,Old.Val3,'+','EST','N')
 
Insert into <Tabela_T1> (Campo_ID1....,Val1,Val2,Val3, Sign, Status)
Values(OLD.Field_ID1,....Old.Val1*-1,Old.Val2*-1,Old.Val3*-1,'-','EST','N')
 
E, funciona bem a maioria das vezes, c/ o resultado pretendido:
Velho a passar para Historico:
==============================================================================
 ID  |        Val1  |        Val2  |        Val3  | Sign  |   Status | Visible
==============================================================================
200 |      35,00  |     135,00  |     335,00  |      +    |   'INS'   |  YES
 
Novos registos:
==============================================================================
 ID  |      Val1  |        Val2  |        Val3  |   Sign  |   Status |Visible
==============================================================================
200 |      35,00  |     135,00  |     335,00  |      +    |   'EST'   |  NO
200 |    -35,00  |     -135,00  |    -335,00  |      -    |   'EST'   |  NO
Perfeito até aqui.
Só que às vezes inexplicavelmente repetem-se
(Chave Unica Inactiva/doutro modo levanta-se a excepção e rollback...)
===============================================================================
 ID  |        Val1  |        Val2  |        Val3  |   Sign  |   Status | Visible
===============================================================================
200 |     35,00  |     135,00  |     335,00  |      +    |   'EST'   |  NO
200 |    -35,00  |    -135,00  |    -335,00  |      -    |   'EST'   |  NO
200 |     35,00  |     135,00  |     335,00  |      +    |   'EST'   |  NO
200 |    -35,00  |    -135,00  |    -335,00  |      -    |   'EST'   |  NO
200 |     35,00  |     135,00  |     335,00  |      +    |   'EST'   |  NO
200 |    -35,00  |    -135,00  |    -335,00  |      -    |   'EST'   |  NO
200 |     35,00  |     135,00  |     335,00  |      +    |   'EST'   |  NO
200 |    -35,00  |    -135,00  |    -335,00  |      -    |   'EST'   |  NO
 
Alguma ideia? Obrigado
Mário





Mais detalhes sobre a lista de discussão lista