|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : avril 2008 Messages : 14 ![]() |
Bonjour à tous,
Je cherche à retourner (via un trigger) le nom de toutes tables altérée/modifiée/updatée/... dans une procédure afin de générer un document xml portant le nom de la table et mis à jour à chaque modif. Existe-il une telle information dans le dictionnaire de données ? Ou tout autre possibilité ? Ps : Je suis sous Oracle 8i |
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 319 ![]() |
Regarde le chapitre 13 dans Oracle8i Application Developer's Guide - Fundamentals
|
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : avril 2008 Messages : 14 ![]() |
Oui merci bon lien, mais je n'ai pas vu de possibilité de retourner le nom de la table modifiée ?
|
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
|
|
|
00
|
|
|
#5 | ||
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
Dans le cas d'un DDL, tu peux employer ora_dict_obj_name
Code :
|
||
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : avril 2008 Messages : 14 ![]() |
pifor > J'ai regardé avec attention le lien que tu m'as donné, et même avec des jointures je ne vois pas comment je pourrais obtenir le nom de la table modifiée à l'instant T. Le but étant justement de ne pas recréer l'ensemble des xml à chaque fois mais uniquement ceux dont la table est modifiée.
laurentschneider > Je n'ai pas encore testé ta solution, mais elle me parait judicieuse. Je vais essayé de suite |
|
|
00
|
|
|
#7 | |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Si vous voulez l'historique complet des instructions INSERT, UPDATE et DELETE sur une table particulière, vous pouvez utiliser utiliser l'audit:
Citation:
Un petit exemple complet serait le bienvenu pour définir le besoin exact. |
|
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : avril 2008 Messages : 14 ![]() |
ARgh ...
Code :
CREATE OR REPLACE TRIGGER tr_xml before ddl ON SCHEMA ORA-00406: param. COMPATIBLE doit être 8.1.6.0.0 ou plus Ya t'il une alternative ? :/ pifor > Pour être plus clair, j'ai un schema composé de x tables, je souhaite générer les fichiers xml spécifiques de ces tables. Ceci est fait. Mais à chaque insertion (d'un patient par exemple), j'aimerai que le fichier XML attaché à la table soit mis à jour. Afin de m'éviter de re-générer l'ensemble des xml à chaque fois, ce qui serait fort préjudiciable pour le serveur. Pour cela, je me suis dit qu'il me fallait récupérer le nom des tables au moment où elles sont modifiées et injecter ce nom dans une procédure qui me génére le xml voulu. (Peut-être existe-il une solution plus adéquate ? ) |
|
|
00
|
|
|
#9 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
quelle est ta valeur de COMPATIBLE ???
8.1.6.0.0 ça a déjà 10 ans, non? tu as quoi? 8.1.5 ? |
|
00
|
|
|
#10 |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Dans ce cas là, vous pouvez vous inspirer de l'exemple avec le trigger: c'est bien d'un trigger "simple" (pour INSERT/UPDATE/DELETE) que vous avez besoin dans votre exemple et non d'un trigger DDL (qui réagit à un ALTER TABLE).
On peut se poser la question s'il est plus simple et plus rapide d'utiliser un trigger et de générer un bout de XML ou d'utiliser l'audit et de générer le XML 1 fois par jour par exemple. A vous de voir. |
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Inscription : avril 2008 Messages : 14 ![]() |
laurentschneider > 8.1.0
pifor > effectivement je me posais la question, un trigger serait trop gourmand en ressource, finalement ce n'est pas la bonne solution. Je crois que je vais abandonner cette idée et passer par un autre langage(ASP), mais je vais étudier la question de l'audit. En tous les cas, merci à vous deux pour votre aide. |
|
|
00
|
|
|
#12 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
8.1.0 ca n'existe pas.
que te donne |
|
00
|
|
|
#13 |
|
Invité de passage
![]() Inscription : avril 2008 Messages : 14 ![]() |
erf c'est pourtant bien ce qui était indiqué dans init.ora >>
compatible = 8.1.0 sinon voici ce que me retourne SELECT * FROM v$version >> Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production PL/SQL Release 8.1.7.0.0 - Production CORE 8.1.7.0.0 Production TNS for 32-bit Windows: Version 8.1.7.0.0 - Production NLSRTL Version 3.4.1.0.0 - Production Faudrait-il que je modifie simplement init.ora ? |
|
|
00
|
|
|
#14 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
oui (et redémarrer l'instance)
|
|
00
|
|
|
#15 |
|
Invité de passage
![]() Inscription : avril 2008 Messages : 14 ![]() |
laurentschneider > merci encore une fois
|
|
|
00
|
|
|
#16 |
|
Invité de passage
![]() Inscription : avril 2008 Messages : 14 ![]() |
Cependant ora_dict_obj_name me sort beaucoup de chose sauf le nom des tables :/
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com