Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
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 15/01/2008, 11h29   #1
Invité régulier
 
Benoit
Inscription : octobre 2004
Messages : 9
Détails du profil
Informations personnelles :
Nom : Benoit
Âge : 40
Localisation : France, Calvados (Basse Normandie)

Informations forums :
Inscription : octobre 2004
Messages : 9
Points : 5
Points : 5
Par défaut Sommer des colonnes avec un trigger MySQL

Bonjour, je débute tout juste avec les triggers et la doc MySQL n'est pas des plus explicite.
Voici mon problème : J'ai une table avec des colonnes id, c1, c2, c3, c4 et s (où s est la somme des c1, c2, etc...).
J'aimerai que dès qu'un update (ou un insert) est fait sur cette table, un trigger vienne insérer la somme des colonnes (c1, c2....) dans s.
Comment puis-je faire?

Merci.
Benoit7114 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2008, 11h38   #2
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
qqch comme ça :
Code :
1
2
3
4
5
6
7
CREATE TRIGGER trig_bi_tatable BEFORE INSERT ON tatable
FOR EACH ROW
SET new.s = new.c1 + new.c2 + new.c3 + new.c4  ;
 
CREATE TRIGGER trig_bu_tatable BEFORE UPDATE ON tatable
FOR EACH ROW
SET new.s = new.c1 + new.c2 + new.c3 + new.c4  ;
Ceci, ce n'est pas très orthodoxe comme façon de faire. Il serait plus normalisé de supprimer ta colonne s de la table, et de créer une vue :
Code :
1
2
3
4
CREATE VIEW tatable_bis
AS
SELECT id, c1, c2, c3, c4, c1 + c2 + c3 + c4 AS s
FROM tatable ;
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 11h16   #3
Invité régulier
 
Benoit
Inscription : octobre 2004
Messages : 9
Détails du profil
Informations personnelles :
Nom : Benoit
Âge : 40
Localisation : France, Calvados (Basse Normandie)

Informations forums :
Inscription : octobre 2004
Messages : 9
Points : 5
Points : 5
Effectivement, ca ne me plaisait pas non plus de stocker des valeurs calculés. J'ai donc créé une vue et ca marche très bien comme ca. Merci.
Mais voila, je suis à nouveau confronté à un problème : Comment puis-je typer les champs que je crée dans ma vue.
Parce que j'ai donc un champ qui récupère la valeur de la somme d'autres champs (décrit en tinyint) et lors de la création de la table, ce champ prend le type décimal !!!
Or le type décimal n'est pas reconnu par Business Object.
Comment puis transformer le champs de ma vue en un type double par exemple?

Merci
Benoit7114 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 12h08   #4
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
CAST
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h56.


 
 
 
 
Partenaires

Hébergement Web