|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Membre confirmé
![]() Ingé. Info. Inscription : janvier 2008 Messages : 338 ![]() |
Bonjour, je débute dans les triggers, je vous explique succinctement mon objectif: emuler un "cascade on delete" étant donné que j'ai du utiliser une table MyIsam.
Donc j'ai deux table une innoDB l'autre Isam, je veut simplement quand je supprime une ligne sur table1 supprimer la ligne correspondante par l'id dans table2. Code :
Merci d'avance.
__________________
Memento Quia Pulvis Es, Et In Pulverem ReverteriS |
||
|
|
00
|
|
|
#2 | ||
|
Membre confirmé
![]() Ingé. Info. Inscription : janvier 2008 Messages : 338 ![]() |
Bon j'ai semble-t-il trouvé la bonne requête,
* Code :
J'ai essayé tout ce que j'ai trouvé comme délimiter sur le net mais toujours la même erreur.
__________________
Memento Quia Pulvis Es, Et In Pulverem ReverteriS |
||
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 848 ![]() |
salut,
il manque le ; à la fin de la ligne
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
|
|
00
|
|
|
#4 | ||
|
Membre confirmé
![]() Ingé. Info. Inscription : janvier 2008 Messages : 338 ![]() |
Code :
de voir le bout de son nez !
__________________
Memento Quia Pulvis Es, Et In Pulverem ReverteriS |
||
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 848 ![]() |
pense que ce que tu mets dans un trigger, une procédure ou une fonction stockée c'est du code sql donc on finit proprement la ligne avec un ;
![]() d'où l'utilisation de delimiter pour changer la fin de ligne pour le create et bien avoir le ; dans le corps de celui-ci tu dois préciser la base visée, la commande c'est:
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
|
|
00
|
|
|
#6 | |
|
Membre confirmé
![]() Ingé. Info. Inscription : janvier 2008 Messages : 338 ![]() |
Citation:
__________________
Memento Quia Pulvis Es, Et In Pulverem ReverteriS |
|
|
|
00
|
|
|
#7 | ||
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 848 ![]() |
si tu as accès à information_schema
essaye ça: Code sql :
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
||
|
|
00
|
|
|
#8 | ||
|
Membre confirmé
![]() Ingé. Info. Inscription : janvier 2008 Messages : 338 ![]() |
Ok, je vais dans Triggers et j'obtiens ça :
Code :
Donc je n'ai pas de trigger enregistré. Le problème viendrait donc de la création elle même ? sachant que en executant le dernier bloc sql du post ça me donne : Code :
Votre requête SQL a été exécutée avec succès
__________________
Memento Quia Pulvis Es, Et In Pulverem ReverteriS |
||
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 848 ![]() |
trigger_schema c'est le nom de ta base et trigger name le nom du trigger...
au fait tu as bien un use avant ta création de trigger pour dire dans quelle base tu es?
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
|
|
00
|
|
|
#10 | ||
|
Membre confirmé
![]() Ingé. Info. Inscription : janvier 2008 Messages : 338 ![]() |
Citation:
Citation:
__________________
Memento Quia Pulvis Es, Et In Pulverem ReverteriS |
||
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 848 ![]() |
oui normalement si tu as sélectionné une db dans la liste avant...
ça devrait pas être un before delete ton événement pour pouvoir accéder à old dans le trigger?
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
|
|
00
|
|
|
#12 |
|
Membre confirmé
![]() Ingé. Info. Inscription : janvier 2008 Messages : 338 ![]() |
Concrètement ça devrait pas poser de pb au moins pour la création non ? mais j'ai quand même essayé avec le before, toujours pareil... je commence à désespérer
__________________
Memento Quia Pulvis Es, Et In Pulverem ReverteriS |
|
|
00
|
|
|
#13 |
|
Membre confirmé
![]() Ingé. Info. Inscription : janvier 2008 Messages : 338 ![]() |
Je viens même d'essayer de faire le triggers uniquement sur ma propre table, pour exclure un éventuel problème entre innodb et myIsam.
->Toujours pas
__________________
Memento Quia Pulvis Es, Et In Pulverem ReverteriS |
|
|
00
|
|
|
#14 | |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 848 ![]() |
j'ai relu la doc...
pour l'instant tu ne peux pas faire référence directement à une table dedans tu ne peux utiliser que old ou new je pense que tu vas devoir opter pour une procédure stockée qui feras ton delete principal et ensuite le répercutera sur la table secondaire... Citation:
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
|
|
|
00
|
|
|
#15 |
|
Membre confirmé
![]() Ingé. Info. Inscription : janvier 2008 Messages : 338 ![]() |
Houla, ça change complètement ma conception du trigger.... j'ai un soucis pour les procédures stockées par contre...
En gros j'ai des "delete on cascade" et pas mal de profondeur du coup avec une procédure stockée je sais pas si je vais pouvoir faire grand chose non ? Sachant que je sais justement pas quelles lignes seront effacées... :/
__________________
Memento Quia Pulvis Es, Et In Pulverem ReverteriS |
|
|
00
|
|
|
#16 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 848 ![]() |
si tu peux avoir 255 niveau de récursion
oui ils ont implémenté les trigger minimalistes lol... j'avoue que j'en ai pas utilisé depuis 2006 quand je tripatouillais oracle 9i ... ![]() donc des triggers un peu évolués si tes données sont réparties juste dans des tables dépendantes sans parcours récursif sur elles tu mais juste tes delete les uns derrière les autres... tout simple sinon tu crées autant de procédures stockées qui traitent la récursion sur une table particulière (vu que tu peux pas faire de requête préparée qui risqueraient de s'auto appeler)
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
|
|
00
|
|
|
#17 | ||
|
Membre confirmé
![]() Ingé. Info. Inscription : janvier 2008 Messages : 338 ![]() |
EUREKÂ
Code :
__________________
Memento Quia Pulvis Es, Et In Pulverem ReverteriS |
||
|
|
00
|
|
|
#18 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 848 ![]() |
ah oui le for each row pour dire que tu veux que ça s'applique à toutes les ligne c'est vrai lol
mais est ce qu'il marche?
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
|
|
00
|
|
|
#19 |
|
Membre confirmé
![]() Ingé. Info. Inscription : janvier 2008 Messages : 338 ![]() |
Non c'était juste la partie ";" & "delimiter" mal placé enfait (à la fin de la requête).
alors si il marche, ça, j'ai pas testé, je ferai ça demain matin ! je te tiens au jus !
__________________
Memento Quia Pulvis Es, Et In Pulverem ReverteriS |
|
|
00
|
|
|
#20 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 848 ![]() |
ok sinon procédure stockée :p
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com