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 12/09/2011, 13h41   #1
Invité de passage
 
Inscription : août 2004
Messages : 28
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 28
Points : 3
Points : 3
Par défaut Problème test trigger

Bonjour à tous,

Je fais des tests sur les triggers. Voici mon 1er tout simple, qui ne pose pas de problème à l'exécution, mais qui n'agit pas après insertion dans la table cible.

Mon trigger :
Code :
1
2
CREATE TRIGGER test AFTER INSERT ON log
FOR EACH ROW SET @lu = 'false';
Ma structure de table 'log' :
Code :
1
2
3
4
5
6
7
8
CREATE TABLE IF NOT EXISTS `log` (
  `IdLog` int(11) NOT NULL AUTO_INCREMENT,
  `ts` datetime DEFAULT NULL,
  `object` varchar(256) CHARACTER SET ucs2 DEFAULT NULL,
  `value` varchar(256) CHARACTER SET ucs2 DEFAULT NULL,
  `Lu` varchar(10) NOT NULL,
  PRIMARY KEY (`IdLog`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=511 ;
Mon test :
Code :
1
2
INSERT INTO `knx`.`log` (`IdLog`, `ts`, `object`, `value`, `Lu`) 
VALUES (NULL, '2011-09-29 13:34:39', 'ert', 'ezr', '');
Quelqu'un aurait-il une piste ?
Slayes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 13h45   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Tu es sûr que c'est "@lu" qu'il faut mettre et pas tout simplement "lu" ?

Sinon, je comprends bien que c'est juste un test mais autant utiliser une valeur par défaut à ta colonne !
Et plutôt que d'écrire 'false', passe ta colonne en type BOOLEAN DEFAULT FALSE.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 13h57   #3
Invité de passage
 
Inscription : août 2004
Messages : 28
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 28
Points : 3
Points : 3
J'ai justement enlevé le default pour faire mes tests . Ce que je cherche au final est un peu plus complexe, mais je commence petit pour comprendre

En enlevant le @ j'obtiens : Unknown system variable 'lu'
Slayes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 14h05   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Essaie comme ça :
Et tant qu'à faire, je ferais plutôt un BEFORE INSERT qu'un AFTER.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 14h40   #5
Invité de passage
 
Inscription : août 2004
Messages : 28
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 28
Points : 3
Points : 3
Impec merci bcp

Le résultat final c'est ça :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
DROP TRIGGER IF EXISTS knx.test;
DELIMITER //
CREATE TRIGGER knx.test 
BEFORE INSERT ON knx.log
FOR EACH ROW BEGIN
	SELECT count(*) FROM Gab_etat WHERE Object_name = NEW.object INTO @result;
	IF @result THEN
             UPDATE Gab_etat SET Etat = NEW.value WHERE Object_name = NEW.object;
	ELSE	
	     INSERT INTO Gab_etat SET Object_name = NEW.object, Etat = NEW.value;
    END IF;
END
//
DELIMITER ;
C'est pas grand chose, mais c'est quand même génial pour le boulot que ca évite de faire dans un autre language
Slayes 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 23h55.


 
 
 
 
Partenaires

Hébergement Web