Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Alguien lo puede corregir?

Estas en el tema de Alguien lo puede corregir? en el foro de Bases de Datos General en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 31/05/2008, 11:42
 
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?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:38.