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 27/09/2007, 17h25   #1
Membre actif
 
Avatar de witch
 
Mina Essabbeur
Inscription : mai 2007
Messages : 345
Détails du profil
Informations personnelles :
Nom : Mina Essabbeur
Âge : 25

Informations forums :
Inscription : mai 2007
Messages : 345
Points : 178
Points : 178
Envoyer un message via MSN à witch
Par défaut modification d'un champs par trigger

salut
j'ai un souci concernant les triggers, j'essaie de mettre comme un ptit test un champs en majuscule
je mets
Citation:
CREATE TRIGGER maj_field before insert on inscrits
for each row
begin
update inscrits set new.Nom=upper(new.Nom);
end
ça marche pas ..syntaxe fausse ou je ne sais quoi (je deteste les messages d'erreurs de phpmyadmin ça montre rien).
bref, ce que j'essaie de faire c'est incremonter le nombre de message pour chaque inscrit à chaque insertion d'un nouveau message, j'ai deux tables en relation une table inscrits et une table messages, biensure l'Id_inscrit de la table inscrits et une clé etrangere vers la table messages.
voilà je sais pas comment proceder déjà je me bloque dans cette syntaxe de mettre en maj un champs, alors comment je peux faire pour faire ça
je compte beaucoup sur vous
merci en avance
witch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2007, 20h43   #2
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Citation:
Le déclencheur ne peut pas faire référence directe aux tables par leur nom, y copmris la table à laquelle il est associé
http://dev.mysql.com/doc/refman/5.0/...-triggers.html


"update inscrits" est manifestement de trop.
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2007, 23h45   #3
Membre actif
 
Avatar de witch
 
Mina Essabbeur
Inscription : mai 2007
Messages : 345
Détails du profil
Informations personnelles :
Nom : Mina Essabbeur
Âge : 25

Informations forums :
Inscription : mai 2007
Messages : 345
Points : 178
Points : 178
Envoyer un message via MSN à witch
salut gi130
Citation:
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
euh, c pour moi cette citation?
bref,j'ai déjà corrigé, je devais ajouter une reponse ici lol
c bien pas de update inscrits juste un set suffit, mais ça m'aide pas trop sur ce que je cherche à faire, j'ai déjà dis ça....je cherche à modifier un champs qui se trouve dans une autre table, cad quand j'ajoute un enregistrement dans la table qui contient le trigger, un champs qui se trouve dans une autre table doit etre modifié.
j'explique plus clairement ce que j'essaie de faire,voilà, j'ai deux tables en relation..
inscrits(Id_inscrit,nom,prenom,..,nb_message)et
messages(Id_message,contenu,#Id_inscrit)
l'ajout d'un nouveau enregistrement dans la table message doit incremonter le nb_message dans la table inscrits.
je sais pas comment faire ça si je suis sensé ne pas utiliser de nom de table
note: j'ai déjà fais ça sur sqlserver voilà le code :
Citation:
create trigger add_msg
on messages for insert
as
declare @id integer,@nb integer
set @id=(select i.id_inscrit from inserted i,inscrits ins where i.Id_inscrit=ins.Id_inscrit)
set @nb=(select nb_message from inscrits where id_inscrit=@id)
begin
update inscrits set nb_message=@nb+1 where id_inscrit=@id
end
comment traduire ça en mysql?
merci.
witch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 01h53   #4
Membre actif
 
Avatar de witch
 
Mina Essabbeur
Inscription : mai 2007
Messages : 345
Détails du profil
Informations personnelles :
Nom : Mina Essabbeur
Âge : 25

Informations forums :
Inscription : mai 2007
Messages : 345
Points : 178
Points : 178
Envoyer un message via MSN à witch
salut
j'ai fais des recherches pour comprendre plus la syntaxe de mysql et j'ai trouvé ce lien
http://dev.mysql.com/doc/refman/5.0/...e-trigger.html
j'ai c/c le code du l'exemple suivant:
Citation:
CREATE TABLE test1(a1 INT);
CREATE TABLE test2(a2 INT);
CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
CREATE TABLE test4(
a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
b4 INT DEFAULT 0
);

CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END;
mais ça m'affiche une erreur sur le trigger..
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO test2 SET a2 = NEW.a1' at line 3
la syntaxe parait fausse, ça met une croix rouge sur INSERT INTO test2

pourtant c la syntaxe correcte que j'ai trouvé dans le manuel mysql 5.0, c bien la version que j'utilise
witch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 10h26   #5
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Quelle est le numéro de version exact et complet de MySQL ?
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 16h00   #6
Membre actif
 
Avatar de witch
 
Mina Essabbeur
Inscription : mai 2007
Messages : 345
Détails du profil
Informations personnelles :
Nom : Mina Essabbeur
Âge : 25

Informations forums :
Inscription : mai 2007
Messages : 345
Points : 178
Points : 178
Envoyer un message via MSN à witch
salut
voilà le numero exacte de la version
Version du client MySQL: 5.0.37
aussi la constante php_version m'affiche :5.2.3
witch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 16h27   #7
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Citation:
Envoyé par witch17 Voir le message
salut
voilà le numero exacte de la version
Version du client MySQL: 5.0.37
aussi la constante php_version m'affiche :5.2.3
Mauvaise question de ma part

Je précise : la version du serveur
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2007, 01h13   #8
Membre actif
 
Avatar de witch
 
Mina Essabbeur
Inscription : mai 2007
Messages : 345
Détails du profil
Informations personnelles :
Nom : Mina Essabbeur
Âge : 25

Informations forums :
Inscription : mai 2007
Messages : 345
Points : 178
Points : 178
Envoyer un message via MSN à witch
lol j'ai pensé à mettre ça mais je me suis dis c pas necessaire ce qui compte le plus ce la version du mysql voilà
Version du serveur: 5.0.41-
j'ai fais même un print screen de phpmyadmin ou il ya tous sur les versions je le join ici, en fait j'utilise wamp5
witch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2007, 01h18   #9
Membre actif
 
Avatar de witch
 
Mina Essabbeur
Inscription : mai 2007
Messages : 345
Détails du profil
Informations personnelles :
Nom : Mina Essabbeur
Âge : 25

Informations forums :
Inscription : mai 2007
Messages : 345
Points : 178
Points : 178
Envoyer un message via MSN à witch
je peux plus attacher des fichiers ici
pas grave j'utilise un lien pour ça
voilà http://i21.tinypic.com/10ekeah.jpg
witch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2007, 02h39   #10
Membre actif
 
Avatar de witch
 
Mina Essabbeur
Inscription : mai 2007
Messages : 345
Détails du profil
Informations personnelles :
Nom : Mina Essabbeur
Âge : 25

Informations forums :
Inscription : mai 2007
Messages : 345
Points : 178
Points : 178
Envoyer un message via MSN à witch
merci pour votre aide
witch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2007, 19h42   #11
Membre actif
 
Avatar de witch
 
Mina Essabbeur
Inscription : mai 2007
Messages : 345
Détails du profil
Informations personnelles :
Nom : Mina Essabbeur
Âge : 25

Informations forums :
Inscription : mai 2007
Messages : 345
Points : 178
Points : 178
Envoyer un message via MSN à witch
je touve même pas de doc sur ça pas assez, et ça m'aide pas ce que je trouve http://dev.mysql.com/doc/refman/5.0/...e-trigger.html
versions:
Version du client MySQL: 5.0.37
Version du serveur: 5.0.41-community-nt
Version du protocole: 10
j'ai essayé le code mais vu que je peu pas mettre de trigger avec une syntaxe...
CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END;

je vois pas comment je peux faire autrement?
witch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2007, 14h46   #12
Invité de passage
 
Inscription : octobre 2006
Messages : 7
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 7
Points : 3
Points : 3
Salut,
essaye un truc du genre :

DELIMITER |
CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END|

Attention , pour PhpMyAdmin tu as juste a modifier le Delimiteur (en dessous de la fenetre SQL) càd :

tu fait la requete ci desssous:
CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END|
Mais tu change le delimiteur en |

Voila esperant t'avoir aidé
2-high est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2007, 19h35   #13
Membre actif
 
Avatar de witch
 
Mina Essabbeur
Inscription : mai 2007
Messages : 345
Détails du profil
Informations personnelles :
Nom : Mina Essabbeur
Âge : 25

Informations forums :
Inscription : mai 2007
Messages : 345
Points : 178
Points : 178
Envoyer un message via MSN à witch
salut 2_high
je croyais que ça aller marcher ce truc de delimiteur mais j'ai essayé tout ce qui est possible à essayer avec ça mais ça passe pas
si j'execute ça..
|CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END|

ça me donne cette erreur:
Citation:
check the manual that corresponds to your MySQL server version for the right syntax to use near '|CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO ' at line 1
mais je crois que le probleme vient de la syntaxe donc j'ai cette erreur sans delimiteur:
Citation:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO test2 SET a2 = NEW.a1' at line 3
snif
witch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2007, 00h41   #14
Membre actif
 
Avatar de witch
 
Mina Essabbeur
Inscription : mai 2007
Messages : 345
Détails du profil
Informations personnelles :
Nom : Mina Essabbeur
Âge : 25

Informations forums :
Inscription : mai 2007
Messages : 345
Points : 178
Points : 178
Envoyer un message via MSN à witch
je me demande si vraiment ce ptit probleme de syntaxe n'a pas de solution :S
bon pour mon probleme ..j'aurais du essayer de faire ce que je veux directement, passer par la doc, mais fermer l'oeil sur les exemples qu'y sont mis
bref, j'ai reussi mon ptit bout de script qui était très facile à ecrire après avoir lu la doc correspendante, mais ça m'a appris quand même des choses...
sans ce probleme j'aurais pas à lire et essayer de trouver des indices pour deduire le probleme, voilà c'était juste ça ce que je voulais
Citation:
create trigger add_message before insert on messages
for each row
update inscrits set nombre_message=nombre_message+1 where

id=new.id_inscrit
merci pour me laisser emmerder avec mes ptit problemes de con
ça aide quand même de savoir debrouiller seul c dure, surtout quand tu est trop stressé par d'autre choses plus importantes.
a+
witch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2007, 16h41   #15
Invité de passage
 
Inscription : octobre 2006
Messages : 7
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 7
Points : 3
Points : 3
Citation:
Envoyé par witch17 Voir le message
salut 2_high
je croyais que ça aller marcher ce truc de delimiteur mais j'ai essayé tout ce qui est possible à essayer avec ça mais ça passe pas
si j'execute ça..
|CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END|

.....
Salut,
Pour les delimiteur il ne fauit pas mettre de delimiteur au debut de la requete, uniquement a la fin
essaye ca (t plus a ca près )
Pour PhpMyAdmin :

CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END|

En mettant bien dans le champ DELIMITEUR la valeur "|" (Sans les guillement bien entendu :p

Sinon si tu utilise un truc du genre MySQL Query browser tu fait :



DELIMITER |
CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END|


n'hesite pas a faire un copier coller

Voila,
2-high


P.S : Oopx je m'etait arrete au premier post après le mien ! Ceci dit moi dans mes triggers g bien des BEGIN ..
2-high est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2007, 20h04   #16
Membre actif
 
Avatar de witch
 
Mina Essabbeur
Inscription : mai 2007
Messages : 345
Détails du profil
Informations personnelles :
Nom : Mina Essabbeur
Âge : 25

Informations forums :
Inscription : mai 2007
Messages : 345
Points : 178
Points : 178
Envoyer un message via MSN à witch
2-high you're not enough too high, look the number of messages that you have gotten, you're new in this forum, it's clear..lol
c'était pour plaisenter
c pas une question de delimiteur que ça passe pas, avec ou sans delimiteur à la fin ça m'affiche cette erreur
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO test2 SET a2 = NEW.a1' at line 3

il aime pas la requete insert into test2.. , j'ai essayé à la place update test2 set a2=new.a1 ,mais ça aime pas non plus
c pas grave j'ai pas besoin de ça pour l'instant
merci
witch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2007, 16h12   #17
Invité de passage
 
Inscription : octobre 2006
Messages : 7
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 7
Points : 3
Points : 3
Par défaut ....

Ok j'insite pas.

Je disait ca juste parce que j'avais eu exactement le meme message d'erreur a cause d'une histoire de delimiteur et que après y avoir passé plusieur minutes j'etait vert juste a cause de ca !

Voila bonne continuation.

2-high
2-high est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2007, 19h50   #18
Membre actif
 
Avatar de witch
 
Mina Essabbeur
Inscription : mai 2007
Messages : 345
Détails du profil
Informations personnelles :
Nom : Mina Essabbeur
Âge : 25

Informations forums :
Inscription : mai 2007
Messages : 345
Points : 178
Points : 178
Envoyer un message via MSN à witch
salut 2-high
merci pour tes reponses ça m'a aidé quand même, parce que avant que tu reponds j'avais laissé tombé le truc
merci
witch 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 06h05.


 
 
 
 
Partenaires

Hébergement Web