Ayuda con Triggers
Publicado por marta (1 intervención) el 06/11/2008 23:21:14
Hola, a ver si alguien puede ayudarme con ésto!
Abajo pongo el código de creación del trigger, éste se crea sin problemas, todos los datos de todas las tablas se insertan correctamente hasta que llego a la inserción de la tabla emisiones, que me sale este error:
-- [Informix][Dynamic Server 2000][Canon] SQL Error (-747) : Table or column matches object referenced in triggering statement.
CREATE PROCEDURE ActualizaCanon(codProd LIKE Distribuciones.cod_producto, numDist LIKE Distribuciones.num_distribucion)
---------------------------------------------------------------------------------------------------------------------
DEFINE importe INT;
DEFINE cont INT;
DEFINE nomMetrica LIKE Metricas.Nombre;
LET nomMetrica = (SELECT Nombre_metrica FROM Distribuciones where Cod_producto = codProd AND Num_distribucion = numDist);
LET cont = (SELECT COUNT(*) FROM EMISIONES WHERE Cod_producto = codProd AND Num_distribucion = numDist);
LET importe = (SELECT Importe_canon FROM Metricas WHERE Nombre = nomMetrica);
UPDATE Distribuciones SET Canon_recaudado = importe*cont WHERE Cod_producto = codProd AND Num_distribucion = numDist;
END PROCEDURE;
---------------------------------------------------------------------------------------------------------------------
CREATE TRIGGER InsertEmisiones
INSERT ON Emisiones
REFERENCING NEW AS new
FOR EACH ROW (EXECUTE PROCEDURE ActualizaCanon(codProd=new.cod_producto, numDist=new.num_distribucion));
---------------------------------------------------------------------------------------------------------------------
CREATE TRIGGER UpdateEmisiones
UPDATE ON Emisiones
REFERENCING OLD as old NEW AS new
FOR EACH ROW (EXECUTE PROCEDURE ActualizaCanon(codProd=new.cod_producto, numDist=new.num_distribucion));
---------------------------------------------------------------------------------------------------------------------
CREATE TRIGGER DeleteEmisiones
DELETE ON Emisiones
REFERENCING OLD AS old
FOR EACH ROW (EXECUTE PROCEDURE ActualizaCanon(codProd=old.cod_producto, numDist=old.num_distribucion));
---------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------
COMMIT;
Un saludo y gracias
Abajo pongo el código de creación del trigger, éste se crea sin problemas, todos los datos de todas las tablas se insertan correctamente hasta que llego a la inserción de la tabla emisiones, que me sale este error:
-- [Informix][Dynamic Server 2000][Canon] SQL Error (-747) : Table or column matches object referenced in triggering statement.
CREATE PROCEDURE ActualizaCanon(codProd LIKE Distribuciones.cod_producto, numDist LIKE Distribuciones.num_distribucion)
---------------------------------------------------------------------------------------------------------------------
DEFINE importe INT;
DEFINE cont INT;
DEFINE nomMetrica LIKE Metricas.Nombre;
LET nomMetrica = (SELECT Nombre_metrica FROM Distribuciones where Cod_producto = codProd AND Num_distribucion = numDist);
LET cont = (SELECT COUNT(*) FROM EMISIONES WHERE Cod_producto = codProd AND Num_distribucion = numDist);
LET importe = (SELECT Importe_canon FROM Metricas WHERE Nombre = nomMetrica);
UPDATE Distribuciones SET Canon_recaudado = importe*cont WHERE Cod_producto = codProd AND Num_distribucion = numDist;
END PROCEDURE;
---------------------------------------------------------------------------------------------------------------------
CREATE TRIGGER InsertEmisiones
INSERT ON Emisiones
REFERENCING NEW AS new
FOR EACH ROW (EXECUTE PROCEDURE ActualizaCanon(codProd=new.cod_producto, numDist=new.num_distribucion));
---------------------------------------------------------------------------------------------------------------------
CREATE TRIGGER UpdateEmisiones
UPDATE ON Emisiones
REFERENCING OLD as old NEW AS new
FOR EACH ROW (EXECUTE PROCEDURE ActualizaCanon(codProd=new.cod_producto, numDist=new.num_distribucion));
---------------------------------------------------------------------------------------------------------------------
CREATE TRIGGER DeleteEmisiones
DELETE ON Emisiones
REFERENCING OLD AS old
FOR EACH ROW (EXECUTE PROCEDURE ActualizaCanon(codProd=old.cod_producto, numDist=old.num_distribucion));
---------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------
COMMIT;
Un saludo y gracias
Valora esta pregunta


0