Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/05/2008, 11:42
carreras
 
Fecha de Ingreso: mayo-2008
Mensajes: 7
Antigüedad: 16 años
Puntos: 0
Alguien lo puede corregir?

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?