|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre habitué
![]() Inscription : mars 2007 Messages : 134 ![]() |
Bonjour à tous,
Pour mon projet je dois faire des triggers dans ma DB. Je tombe sur des "mutatings table". Dès lors je tente d'appliquer la méthode des deux déclencheurs avec table temporaire. ( la théorie ) Pour remplir ma table temporaire, plutôt que faire un INSERT INTO avec un VALUES et citer chacune de mes colonnes, j'aimerais insérer directement tout mon record "new" de la ligne. Car j'ai des tables qui ont pas mal de colonnes... Cela me permettrait de gagner pas mal de temps! En pratique, au lieu de : Code ORACLE :
j'aimerais un truc du style : Code ORACLE :
|
||||
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 459 ![]() |
non.
:new est un préfixe qui fait référence à une colonne, pas à une concaténation de données, ou un groupe d'enreg, etc...
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Inscription : mars 2007 Messages : 134 ![]() |
Donc je n'ai pas accès à un record que j'insère directement sans passer par le nommage des colonnes puisque j'insère quand même tout le record?
C'est quand même dommage ça... J'aurais cru qu'Oracle fournirait un truc du genre. Bon ben tant pis... Je vais devoir m'amuser... Merci quand même. |
|
|
00
|
|
|
#4 | ||
|
Membre habitué
![]() Inscription : mars 2007 Messages : 134 ![]() |
Bon alors j'ai trouvé une solution : un petit script pour créer ma requête en PL/SQL, comme ça pas besoin d'écrire à la main tous les champs.... Pour ceux que ca interesse je le met ici.
Je crée une table temporaire qui va accueillir ma requête. Code ORACLE :
Et le tour est joué! J'ai ma requête INSERT INTO qui copie mon record NEW dans ma table temporaire!
|
||
|
|
00
|
|
|
#5 | ||
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 459 ![]() |
Houla la !! C'est pas du tout optimisé !
Bon, tu fais 2 fois la même boucle. Prends 2 variables (1 pour le INSERT, 1 pour le VALUES) et en 1 passe du curseur tu te crées les 2 ordres que tu concatènes ensuite. En fait je suppose que tu ne le fais qu'une fois, donc ça va, je croyais que c'était dans le trigger. Code :
__________________
More Code : More Bugs. Less Code : Less Bugs |
||
|
|
00
|
|
|
#6 |
|
Membre habitué
![]() Inscription : mars 2007 Messages : 134 ![]() |
Merci beaucoup pour l'optimisation. Je ne suis pas encore très à l'aise avec PL/SQL.
Sinon, en effet je ne l'utilise qu'une seule fois pour créer ma requête. Après je mets ma requête tel quelle est générée dans mon trigger. merci. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com