Ajout d'un trigger d'insertion

Ajout d'un trigger d'insertion - SQL/NoSQL - Programmation

Marsh Posté le 23-10-2006 à 11:52:50    

Bonjour,
mon problème est le suivant, j'ai deux tables.
J'insère dans une table A des données par exemple :
son identifiant, son nom, et l'identifiant du projet auquel il appartient.
 
Et j'aimerai créer un trigger, qui me permettrait pour chaque insertion dans cette table, d'insérer dans une nouvelle table B les informations suivantes :
l'identifiant du projet(le même que celui plus haut), et un nouveau nom.
 
Or ce nouveau nom est une variable PHP que je créé dans mon code et que je n'insère dans aucune table à part la B.
 
J'étais partie pour faire quelque chose de la sorte, mais je suis bloqué :
CREATE TRIGGER `ins_B` AFTER INSERT ON `A`
FOR EACH ROW
BEGIN
 INSERT INTO `B` (`id_projet`, `nouveau_nom`) VALUES (...Et là je ne sais pas quoi mettre...)
END;&
 
Merci de votre aide.
 
EDit : j'ai modifié de catégorie, désolé !


Message édité par neo00neo le 23-10-2006 à 13:35:10
Reply

Marsh Posté le 23-10-2006 à 11:52:50   

Reply

Marsh Posté le 23-10-2006 à 12:13:52    

Mauvaise cat.
 
Ah oui, je saisis. PHP == SQL == MySQL. Comme d'hab. :jap:


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 23-10-2006 à 13:35:29    

Changement de catégorie, un peu d'aie s'il ovus plait ! Merci ! :)

Reply

Marsh Posté le 23-10-2006 à 15:06:42    

"inserted.id_project" je suppose.
 
logiquement, le nom des deux tables virtuelles utilisables dans les triggers sont dans la doc.
 
généralement c'est INSERTED et DELETED, mais vu que ça ne fait pas partie de la norme SQL, chaque SGBD a choisi un nom différent, comme d'hab.

Reply

Marsh Posté le 23-10-2006 à 15:15:21    

Merci MagicBuzz, mais il me manque une information, avec :
inserted.id_project
 
Je ne remplis qu'une colonne de ma table, seulement celle de id_project, mais pour nouveau_nom?
En gros en PHP nouveau_nom est de la forme $new_name... Donc change selon les fichiers.
Comment intégrer cela automatiquement dans mon trigger?

Reply

Marsh Posté le 23-10-2006 à 15:23:28    

fouyaya...
 
toi faut vraiment que t'arrête de faire du php et que tu comprennes le SQL :p
 
ton "nouveau_nom" sera dans le champ "inserted.nouveau_nom"
 
"inserted", c'est une "table" virtuelle qui contient les données qui ont été reçues par la commande "insert". ainsi, tu retrouves dedans tout ce que tu as envoyé depuis le php.
chais pas comment expliquer ça plus clairement... :spamafote:

Reply

Marsh Posté le 23-10-2006 à 16:46:10    

Je te remercie de ce rapide cours ! :)

Reply

Marsh Posté le 23-10-2006 à 20:18:11    

sous oracle c'est par exemple
 
:NEW et :OLD (update)
 
:NEW.monchamp par exemple...

Reply

Marsh Posté le 24-10-2006 à 02:30:59    

merci, je me souvenais plus ce que c'était sous Oracle ;)
 
mais bon, inserted et deleted sont les plus courrants (SQL Server, PostGre et je crois même MySQL utilisent ces noms, qui sont plus parlants que new et old à mon goût)

Reply

Marsh Posté le 24-10-2006 à 11:19:39    

Bien j'ai encore un soucis, voici ma requête, elle ne semble pas fonctionner :
CREATE TRIGGER `ins_A` AFTER INSERT ON `B`
FOR EACH ROW
BEGIN
  INSERT INTO `A` VALUES (inserted.version, inserted.databa_n);
END;
 
Cela ne marche pas, j'ai essayé de remplacer "inserted", par "new", et il me met comme message erreur : "Unknown column database_n in NEW"...
 
J'ai vu que :  
"Les mots clé OLD et NEW  vous permette d'accéder aux colonnes dans les lignes affectées par le déclencheur."
 
Ce que je ne vois pas c'est à quel moment on lui indique de prendre la valeur "database_n"... Vu qu'elle n'apparait dans aucune table à part A...
 
Seulement  
Merci de votre aide !


Message édité par neo00neo le 24-10-2006 à 11:55:01
Reply

Sujets relatifs:

Leave a Replay

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