Hola estoy trabajando en Interbase 6.5 y he creado este trigger:
Código SQL
[-]SET TERM ^;
CREATE TRIGGER CHECKSTOCK FOR DETALLE_FACTURA_A
ACTIVE BEFORE INSERT POSITION 0
as
declare variable cant integer;
begin
select (existencia) from articulos where articulo=NEW.ARTICULO into :cant;
if (NEW.CANTIDAD > cant) then
begin
exception STOCK_MINIMO;
end
if (NEW.CANTIDAD < cant) then
begin
update articulos set existencia = existencia - new.CANTIDAD where articulo=new.articulo;
end
WHEN SQLCODE -803 DO
EXCEPTION REPITE_ART;
end
^
SET TERM;^
para una tabla con este formato:
TABLA "DETALLE_FACTURA_A"
"FACTURA_A" INTEGER NOT NULL,
"ARTICULO" INTEGER NOT NULL,
"CANTIDAD" INTEGER,
"DESCUENTO_1" DOUBLE PRECISION,
"DESCUENTO_2" DOUBLE PRECISION,
"SUBTOTAL" DOUBLE PRECISION
CONSTRAINT "PK_DETALLE_FACTURA_A" PRIMARY KEY ("FACTURA_A", "ARTICULO")
donde la clave primaria esta conformada por el campo FACTURA_A Y ARTICULO ambos son atributos de otras tablas (claves foraneas)
El problema es que funciona todo, menos la ultima linea que en teoria tiene que elevar una excepcion cuando repite un articulo en la tabla, no se si es por el momento en que ejecuta el trigger (BEFORE INSERT).
Si alguien tiene idea, gracias.