Tengo dos tablas:
Sanciones
codiSancion (clave primaria) INTEGER, import DECIMAL, totalImport DECIMAL
Multas
codiSancion (clave primaria)
He de calcular el importe total de las multas que tienen una sanción. De tal manera que si se modifica, borra o se da de alta una multa, totalImport se actualizará.
Yo he realizado esto:
--Nueva Multa
BEGIN WORK;
CREATE PROCEDURE nuevaMulta (codiSancio LIKE Multes.codiSancio, import LIKE Sancions.import)
UPDATE Sancions
SET totalImport=totalImport+import
WHERE Multes.codiSancio=codiSancio;
END PROCEDURE;
CREATE TRIGGER nuevaMulta
INSERT ON Multes
REFERENCING NEW AS nou
FOR EACH ROW (EXECUTE PROCEDURE nuevaMulta(nou.codiSancio, nou.import));
--Modificar Multa
CREATE PROCEDURE ModificarMulta (codiSancioN LIKE Multes.codiSancio, importN LIKE Sancions.import, codiSancioO LIKE Multes.codiSancio, importO LIKE Sancions.import)
IF (codiSancioO<>codiSancioN) OR (importO<>importN)
THEN
SELECT import INTO zimportO FROM Sancions
WHERE Multes.codiSancio=codiSancionsO;
SELECT import INTO zimportN FROM Sancions
WHERE Multes.codiSancio=codiSancioN;
UPDATE Sancions
SET totalImport=totalImport+importN
WHERE Sancions.codiSancio=codiSancioN;
UPDATE Sancions
SET totalImport=totalImport-importO
WHERE Sancions.codiSancio=codiSancioO;
END IF;
END PROCEDURE;
CREATE TRIGGER ModificarMulta
UPDATE OF codiSancio, import ON Multes, Sancions
REFERENCING OLD AS vell NEW AS nou
FOR EACH ROW (EXECUTE PROCEDURE ModificarMulta (nou.codiSancio, nou.import, vell.codiSancio, vell.import));
--Borrar multa
CREATE PROCEDURE BorrarMulta (codiSancio LIKE Multes.codiSancio, import LIKE Sancions.import)
UPDATE Sancions
SET totalImport=totalImport-import
WHERE Sancions.codiSancio=codiSancio;
END PROCEDURE;
CREATE TRIGGER BorrarMulta
DELETE ON Sancions
REFERENCING OLD AS vell
FOR EACH ROW (EXECUTE PROCEDURE BorrarMulta (vell.codiSancio, vell.import));
COMMIT WORK;
Es correcto?