Ver Mensaje Individual
  #13  
Antiguo 01-12-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Reputación: 24
guillotmarc Va por buen camino
Hola.

¿ Que versión de Firebird utilizas ?. Ese condicional está escrito utilizando una variable disponible desde Firebird 2.0 en adelante.

Si aún utilizas Firebird 1.0 o 1.5, probablemente ya sea hora de que hagas el cambio, estas versiones son muy antiguas.

Un trigger alternativo, sin usar esa variable, sería :

Código SQL [-]
SET TERM ^ ;

CREATE TRIGGER RECALCULAR_STOCK for DETALLE_P
active after insert or update or delete position 0
AS
begin

  UPDATE ARTICULO SET STOCK = -1 * (SELECT SUM(CANTIDAD_ARTICULO) FROM DETALLE_P WHERE CODIGO = coalesce(new.CODIGO, old.CODIGO))
  WHERE ID_ARTICULO = coalesce(new.CODIGO, old.CODIGO);
end
^

SET TERM ; ^

NOTA: Ese condicional está para solventar el problema de que en un Trigger AFTER DELETE, las variables NEW no tienen valor, y hay que consultar el valor OLD del código de artículo (mientras que en un Trigger AFTER INSERT ocurre exactamente lo contrario). En la segunda propuesta, se solventa el problema mediante el uso de la función COALESCE.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita