Trigger for delete

Le
J
Bonjour,

J'ai 2 tables "maitre" et "detail" avec une "foreign key" on "cascade
delete".

Dans la table "detail", je fais une opération pendant un "trigger for
delete".

Cette opération nécessite des informations venant des données des lignes
effacées (table deteled) et des lignes parente de ces données (que
j'obtiens en faisant un join entre deleted et maitre).

Si j'efface une ligne de la table "detail", pas de problème, mon trigger
fonctionne (j'obtiens toutes les données).
En revanche, si j'efface une ligne "maitre", la ou les lignes "detail"
sont effacées en cascade, le trigger est appelé, la table deleted
contient bien les lignes effacées, *MAIS*, la table maitre ne contient
plus la ligne parente des lignes deleted.

Est-ce "normal", est-ce qu'il y a une syntaxe pour accéder à la ligne
parente effacée ?
Pour l'instant, je n'ai trouvé qu'une solution, c'est de supprimer le
cascade sur la foreign key et de faire un trigger instead of delete sur
la table "maitre" (pour effacer les lignes de la table "detail" puis les
lignes "maitre"). Mais compte tenu de ma base de données, ça représente
pas mal de travail de tout changer (les trigger instead of imposent
certaines contraintes)

Une idée ?

Merci.

Jean
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Med Bouchenafa
Le #18685301
Une solution serait :
Dans le trigger de la table "maitre", sauvegarder dans une table temporaire
le contenu de deleted
Dans le trigger de la table ""detail", lire le contenu a partir de cette
table temporaire

Bien cordialement
Med Bouchenafa

"J" news:49998a48$0$21359$
Bonjour,

J'ai 2 tables "maitre" et "detail" avec une "foreign key" on "cascade
delete".

Dans la table "detail", je fais une opération pendant un "trigger for
delete".

Cette opération nécessite des informations venant des données des lignes
effacées (table deteled) et des lignes parente de ces données (que
j'obtiens en faisant un join entre deleted et maitre).

Si j'efface une ligne de la table "detail", pas de problème, mon trigger
fonctionne (j'obtiens toutes les données).
En revanche, si j'efface une ligne "maitre", la ou les lignes "detail"
sont effacées en cascade, le trigger est appelé, la table deleted contient
bien les lignes effacées, *MAIS*, la table maitre ne contient plus la
ligne parente des lignes deleted.

Est-ce "normal", est-ce qu'il y a une syntaxe pour accéder à la ligne
parente effacée ?
Pour l'instant, je n'ai trouvé qu'une solution, c'est de supprimer le
cascade sur la foreign key et de faire un trigger instead of delete sur la
table "maitre" (pour effacer les lignes de la table "detail" puis les
lignes "maitre"). Mais compte tenu de ma base de données, ça représente
pas mal de travail de tout changer (les trigger instead of imposent
certaines contraintes)...

Une idée ?

Merci.

Jean


J
Le #18687671
Med Bouchenafa a écrit :
Une solution serait :
Dans le trigger de la table "maitre", sauvegarder dans une table
temporaire le contenu de deleted
Dans le trigger de la table ""detail", lire le contenu a partir de cette
table temporaire



Merci pour cette idée, mais elle me semble encore plus contraignante que
de créer des triggers instead of dans les tables parentes. Je n'ai pas
trop l'habitude de manipuler ce type de table.

Jean
Patrice
Le #18688551
Perso je n'ai pas trop l'habitude des cascades (!) mais je crois me souvenir
que j'avais conclu une fois que :
- c'est sans doute implanté avec quelque chose qui ressemble à un trigger
- si on ne fait que de la destruction utiliser la destruction en cascade. Si
il y a un trigger à mon avis autant implanter soi-même la destruction en
cascade.

(perso j'utilise des SP dans lequels je fais éventuellement mes
destructions en cascade).

--
Patrice

"J" : 499a6b2c$0$24238$
Med Bouchenafa a écrit :
Une solution serait :
Dans le trigger de la table "maitre", sauvegarder dans une table
temporaire le contenu de deleted
Dans le trigger de la table ""detail", lire le contenu a partir de cette
table temporaire



Merci pour cette idée, mais elle me semble encore plus contraignante que
de créer des triggers instead of dans les tables parentes. Je n'ai pas
trop l'habitude de manipuler ce type de table.

Jean


Publicité
Poster une réponse
Anonyme