|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |
|
Invité de passage
![]() Inscription : mai 2008 Messages : 1 ![]() |
bonjour,
je suis novice en trigger je voulais savoir si c'est possible et si oui comment faire pour créer un trigger qui va créer une colonne dans une table lors d'un insert j'ai voulu faire ca, mais le alter est réservé par qoi je pourrais remplacer ca Citation:
Merci |
|
|
|
00
|
|
|
#2 |
|
Membre chevronné
![]() Inscription : septembre 2007 Messages : 519 ![]() |
Je pense que cela n'est pas faisable, même avec un EXECUTE IMMEDIATE pour la simple et bonne raison que la table doit être "libre" pour passer une DDL. hors quand tu es dans un TRIGGER BEFORE INSERT, celle-ci ne l'est pas.
D'un autre point de vue ton code reste bancal car tu vas essayer de créer une colonne en plus à chaque nouvelle insertion. C'est réellement ce que tu veux ? |
|
|
00
|
|
|
#3 |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
Un DDL génère un commit automatique qui n'est pas autorisé dans un trigger de tables
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 459 ![]() |
Tu peux peut être créer une procédure autonome qui fait l'ALTER en execute immediate.
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#5 |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
une procédure autonome insérée dans un trigger provoquera une erreur.
Au sein d'un trigger de table, aucun DDL ne sera autorisé quelque soit son invocation en raison du commit implicite.
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
00
|
|
|
#6 | ||||||
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 459 ![]() |
J'ai testé, ça marche très bien :
La procédure DDL Code :
Code :
Code :
__________________
More Code : More Bugs. Less Code : Less Bugs |
||||||
|
|
00
|
|
|
#7 |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
effectivement en utilisant un PRAGMA AUTONOMOUS_TRANSACTION cela marche.
De plus, je viens de relire le code du trigger du PO et je pensais qu'il essayait d'ajouter une colonne à la même table que celle du trigger. Autant pour moi. Reste néanmoins d'éventuel soucis de visibilité si la procédure autonome fait autre chose que la ta création de la table car c'est une transaction séparée et ne vois donc pas les modifications non commitées de l'actuelle transaction
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
00
|
|
|
#8 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 459 ![]() |
Si le besoin est juste d'avoir une table avec les colonnes = au différentes données d'une autre table, ça me va.
Faut vérifier que la colonne à rajouter n'existe pas déjà (donc un index unique sur TYPE de la première table).
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com