IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Récupérer le nom d'une table à la volée


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 14
    Points : 5
    Points
    5
    Par défaut Récupérer le nom d'une table à la volée
    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

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Regarde le chapitre 13 dans Oracle8i Application Developer's Guide - Fundamentals

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Oui merci bon lien, mais je n'ai pas vu de possibilité de retourner le nom de la table modifiée ?

  4. #4
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Dans le cas d'un DDL, tu peux employer ora_dict_obj_name

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    create or replace trigger tr before ddl on schema begin
     insert into log values (ora_dict_obj_name); -- ou xml blabla
    end;
    /

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    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

  7. #7
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Si vous voulez l'historique complet des instructions INSERT, UPDATE et DELETE sur une table particulière, vous pouvez utiliser utiliser l'audit:

    Enabling Object Auditing
    To audit all successful and unsuccessful DELETE statements on the SCOTT.EMP table, BY SESSION (the default value), enter the following statement:

    AUDIT DELETE ON scott.emp;


    To audit all successful SELECT, INSERT, and DELETE statements on the DEPT table owned by user JWARD, BY ACCESS, enter the following statement:

    AUDIT SELECT, INSERT, DELETE
    ON jward.dept
    BY ACCESS
    WHENEVER SUCCESSFUL;
    Mais on ne peut pas demander directement à la commande AUDIT de travailler sur une procédure PL/SQL donnée à moins de modifier la procédure en question en ajoutant les commandes AUDIT en début de procédure et NOAUDIT en fin de procédure avec du SQL dynamique.

    Un petit exemple complet serait le bienvenu pour définir le besoin exact.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    ARgh ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE OR REPLACE TRIGGER tr_xml before ddl ON SCHEMA
    ERREUR à la ligne 1 :
    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 ? )

  9. #9
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    quelle est ta valeur de COMPATIBLE ???

    8.1.6.0.0 ça a déjà 10 ans, non? tu as quoi? 8.1.5 ?

  10. #10
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    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.

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    laurentschneider > 8.1.0 (on est limité en budget)

    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.

  12. #12
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    8.1.0 ca n'existe pas.

    que te donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from v$version;

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    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 ?

  14. #14
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    oui (et redémarrer l'instance)

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    laurentschneider > merci encore une fois

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Cependant ora_dict_obj_name me sort beaucoup de chose sauf le nom des tables :/

  17. #17
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Peut être tu va trouver ton bonheur ici

Discussions similaires

  1. récupérer le nom d'une table
    Par PUARAI dans le forum Requêtes
    Réponses: 3
    Dernier message: 22/01/2010, 16h57
  2. Réponses: 1
    Dernier message: 12/01/2010, 22h18
  3. Récupérer le nom d'une table
    Par Flo88 dans le forum VBA Access
    Réponses: 6
    Dernier message: 03/03/2008, 14h43
  4. Récupérer le nom d'une table dans une fonction
    Par Milo59000 dans le forum SQL
    Réponses: 5
    Dernier message: 13/02/2008, 15h40
  5. Récupérer le nom d'une table
    Par romulus67 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 07/01/2008, 13h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo