|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
Inscription : mai 2011 Messages : 10 ![]() |
bonjour,
je veux faire un trigger qui bloque l'insertion dans une table pour certaine valeurs, et faire l'insertion dans une autre table. merci bcp |
|
|
00
|
|
|
#2 |
|
Membre confirmé
![]() Grégoire MARTINIngénieur développement logiciels Inscription : janvier 2011 Messages : 128 ![]() |
Bonjour,
Qu'as tu déjà essayé ?
__________________
Cordialement. |
|
|
00
|
|
|
#3 |
|
Membre éclairé
![]() |
quelle sont tes initiatives.
|
|
|
00
|
|
|
#4 | ||
Inscription : mai 2011 Messages : 10 ![]() |
Code :
|
||
|
|
00
|
|
|
#5 |
|
Membre éclairé
![]() |
je ne voix pas le probleme
|
|
|
00
|
|
|
#6 |
|
Membre confirmé
![]() Grégoire MARTINIngénieur développement logiciels Inscription : janvier 2011 Messages : 128 ![]() |
Bonjour,
Je pense qu'il va te falloir 2 triggers + 1 collection pour gerer ce cas. 1) Creer une collection publique destinée à stocker les pk de la table RA_INTERFACE_LINES_ALL REFERENCING. 2) Créer un trigger sur before insert sur la table RA_INTERFACE_LINES_ALL REFERENCING. Si tes conditions sont remplies, alimente la table SMT_RA_INTERFACE_LINES_ALL et alimente la collection avec de quoi identifier la ligne inserée sur RA_INTERFACE_LINES_ALL 3) creer un deuxieme trigger sur la table SMT_RA_INTERFACE_LINES_ALL sur after insert Recupere la collection alimentée par le premier trigger et drop les lignes de la table RA_INTERFACE_LINES_ALL 4) detruit la collection avec un .DELETE en fin de processus.
__________________
Cordialement. |
|
|
00
|
|
|
#7 |
Inscription : mai 2011 Messages : 10 ![]() |
|
|
|
00
|
|
|
#8 | ||
|
Membre éclairé
![]() |
le commit dans le trigger est permis.
ton trigger me semble correcte. teste.. Code :
|
||
|
|
01
|
|
|
#9 | |||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Citation:
Citation:
Peut être que passer par une VUE et un TRIGGER INSTEAD OF permettrait de résoudre le problème. Sinon le plus simple est de faire une procédure stocké qui s'occupe de l'insert et de ne jamais faire d'insertion directement sur la table, mais toujours exécuter la procédure, comme ça pas besoin de trigger Ben non ! CREATE TRIGGER Citation:
|
|||
|
|
00
|
|
|
#10 | |
|
Membre confirmé
![]() Grégoire MARTINIngénieur développement logiciels Inscription : janvier 2011 Messages : 128 ![]() |
Citation:
La collection était déclarée dans un PKS.
__________________
Cordialement. |
|
|
|
00
|
|
|
#11 | ||
|
Membre expérimenté
![]() Mohamed HouriInscription : mars 2010 Messages : 286 ![]() |
Quelques soit la solution que l’on vous proposera ici, n’oubliez pas de la considérer d’un point de vue concurrentiel. Vous savez bien qu’en Oracle les selects (sans clause for update) ne bloquent pas les update/delete/insert et vice versa. Imaginez un instant que lors de l’exécution de votre trigger par un utilisateur user1, le select suivant:
Code :
Mais manque de chance, le user2, juste après cet insert commit son travail et hop !!! vous avez quand même inséré une ligne dans la table SMT_RA_INTERFACE_LINES_ALL alors qu’il ne le fallait pas. D’une manière générale deux conseils sur les triggers:
|
||
|
|
10
|
|
|
#12 |
Inscription : mai 2011 Messages : 10 ![]() |
|
|
|
00
|
|
|
#13 |
Inscription : mai 2011 Messages : 10 ![]() |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com