[trigger] joindre des periodes qui coincident dans une table

joindre des periodes qui coincident dans une table [trigger] - SQL/NoSQL - Programmation

Marsh Posté le 14-02-2006 à 14:42:34    

Je m'explique ! J'ai une table qui possede des periodes pour des salles. Je voudrais creer un trigger qui joind les periodes qui se 'touchent'  :sweat:  automatiquement, apres insertion d'un nouvel enregistrement.
 
par exemple il y a l'enregistrement :
salle   debut         fin
1     13/02/06    16/02/06
2     10/02/06    11/02/06
 
on rentre :
salle : 1 , debut : 16/02/06, fin : 18/02/06
 
et au lieu que ça donne :
salle   debut         fin
1     13/02/06    16/02/06
2     10/02/06    11/02/06
1     16/02/06    18/02/06
 
ça donne :
salle   debut         fin
1     13/02/06    18/02/06
2     10/02/06    11/02/06
 
est ce possible ?

Reply

Marsh Posté le 14-02-2006 à 14:42:34   

Reply

Marsh Posté le 15-02-2006 à 12:34:04    

un pti up pour mon soucis ! :)

Reply

Marsh Posté le 15-02-2006 à 16:38:54    

j'ai trouvé comment il fallait faire avec un trigger fter update :  
begin
UPDATE PERIODE
SET date_fin =  new.date_fin
WHERE date_fin = new.date_debut
AND id = new.id;
end
le probleme c'est que je ne vois pas comment supprimer ou annuler le nuplet que je viens d'inserer qui n'est donc plus valable..
j'avais essayé ça :
DELETE FROM PERIODE
WHERE id_resa = new.id_resa;
juste apres dans le trigger after update mais ça m'efface toute mes insertion du coup ... evidement !
comment faire donc pour annuler ou effacer le dernier nuplet SI il y a eu une update de faite ?

Reply

Marsh Posté le 15-02-2006 à 18:34:39    

DELETE FROM PERIODE  
WHERE id_resa = new.id_resa
AND date_debut = new.date_debut;
 
Mais attention de bien ajouter des conditions, pour ne joindre les dates (avec l'update) et faire l'effacement (delete) uniquement si on a effectivement le droit de joindre le dates (selon tes propres critères).

Reply

Marsh Posté le 16-02-2006 à 08:37:02    

Je ne sais pas comment ajouter de conditions dan un trigger pour que l'effaceement ne s'effectue uniquement si un update a été fait ?

Reply

Marsh Posté le 16-02-2006 à 10:07:54    

Code :
  1. UPDATE PERIODE
  2. SET date_fin =  new.date_fin
  3. WHERE date_fin = new.date_debut
  4. AND id = new.id;
  5. IF (SQL%ROWCOUNT > 0)
  6. THEN
  7.   DELETE FROM PERIODE 
  8.   WHERE id_resa = new.id_resa
  9.   AND date_debut = new.date_debut;
  10. END IF;

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed