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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 14
    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 confirmé 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
    Par défaut
    Regarde le chapitre 13 dans Oracle8i Application Developer's Guide - Fundamentals

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 14
    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

  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
    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
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 14
    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
    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
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 14
    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 ? )

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