Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/02/2006, 08h28   #1
Membre du Club
 
Inscription : décembre 2003
Messages : 257
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 257
Points : 52
Points : 52
Par défaut [trigger] joindre des periodes qui coincident dans une table

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 ?

J'ai trouvé la premiere partie qui modifie la date :
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 ça ne supprime pas le dernier nuplet inséré qui n'a plus de raison d'etre du coup.
J'avais tenté un :
DELETE FROM PERIODE
WHERE id_resa = new.id_resa;
juste apres le premier trigger, mais ça m'effacait tous les enregitrement que je faisais evidement.
Comment faire pour n'executer cette commande que s'il y a eu un update ?
Yogy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2006, 23h01   #2
Membre régulier
 
Inscription : décembre 2004
Messages : 142
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 142
Points : 76
Points : 76
Pourquoi faire un DELETE ?
Quelque chose comme ça devrait approcher de la solution :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
SELECT COUNT(*) AS NBRE
FROM MATABLE
WHERE DATE_FIN = :Date_Debut
AND     SALLE = :Salle
 
Si NBRE =1 Alors
 
   UPDATE MATABLE
       SET DATE_FIN  = :Date_fin
   WHERE DATE_FIN = :Date_Debut
   AND     SALLE = :Salle
Sinon
   INSERT INTO MATABLE
    (SALLE, DATE_DEBUT, DATE_FIN)
   VALUES
    (:Salle, :Date_Debut, :Date_Fin)
Vulcanos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2006, 23h09   #3
SLE
Membre chevronné
 
Avatar de SLE
 
Homme Serge LESPAGNARD
Consultant informatique
Inscription : janvier 2004
Messages : 587
Détails du profil
Informations personnelles :
Nom : Homme Serge LESPAGNARD
Âge : 38
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : janvier 2004
Messages : 587
Points : 730
Points : 730
Pourquoi ne pas utiliser une procédure stockée pour faire ton insertion ? Tu pourrais faire tous les contrôles nécessaires dans la procédure, et faire soit un insert, soit un update en fonction du cas rencontré.
Je crois aussi que tu devrais prévoir une clé unique (avec générateur)
pour ta table, ça te facilitera le code dans la PS.

@+
SLE est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h19.


 
 
 
 
Partenaires

Hébergement Web