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 code SQL de toutes mes vues [11g]


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 29
    Points : 14
    Points
    14
    Par défaut Récupérer le code SQL de toutes mes vues
    Bonjour

    dans le cadre d'une migration de données, je souhaite récupérer les code SQL de toutes les vues d'un schéma. A priori, je pensais utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select view_name, text from user_views
    Qui me renvoie le code sous forme de BLOB. J'aimerais en faire du texte car je veux encore enlever les sauts de lignes pour pouvoir formater le code plus facilement (rajouter CREATE VIEW xxx AS ...).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select
    reli,x,y,
    ...
    devrait devenir

    Je suis sûr qu'il y a une façon très simple de faire ça, mais je ne vois pas trop. J'ai essayé naïvement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select view_name, TO_CHAR(text) from user_views
    Mais la fonction TO_CHAR() ne prend pas de BLOB comme arguments.

    J'ai aussi essayé ce que j'ai trouvé ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select view_name, utl_raw.cast_to_varchar2(dbms_lob.substr(text)) from user_views
    Mais sans plus de succès (ORA-00997)

    Est-ce que quelqu'un a une idée?

    Merci beaucoup d'avance et bonne fin de journée!

  2. #2
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Ce n'est pas forcément la bonne méthode de le faire.
    Dans l'absolu, récupérer le code de tes vues via une requête, OK, pas de soucis.
    Mais derrière, tout ce qui est mise en forme pour pouvoir les réexecuter, ce n'est pas le role de ton sgbd.
    Tu n'aurais pas un autre moyen de travailler ton text, avec un outil plus adapter?
    Python est pas mal pour tout ce qui est parsing, ou perl pour les regex...

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 29
    Points : 14
    Points
    14
    Par défaut
    J'avoue que c'est un peu du bricolage car je ne suis loin d'être un expert Oracle et parce que je n'ai que des droits très limités sur la base!

    Mais même sans faire de mise en forme en SQL, est-ce que j'ai un moyen de récupérer, au moins, la requête sous forme de texte? J'imagine que même si je fais tout ça en Python, je devrais de toute façon transformer mon BLOB en quelque chose que je peux parser?

    Merci :-)

  4. #4
    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
    Citation Envoyé par stöckli Voir le message
    ...
    A priori, je pensais utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select view_name, text from user_views
    Qui me renvoie le code sous forme de BLOB. ...
    Non, il vous renvoie le type long (faite un desc sur user_views) qui est autre chose que BLOB ou bien CLOB. Vous pouvez soit utiliser dbms_metadata.get_ddl soit utiliser la téchnique décrit dans "working with long columns".

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 29
    Points : 14
    Points
    14
    Par défaut
    Merci de vos réponses!

    J'ai finalement résolu ça de manière assez simple avec python effectivement, via le module cx_Oracle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        query = "select view_name, text from user_views"
        cur.execute(query)
        res = cur.fetchall()
     
        for i in res:
            print "CREATE VIEW schema." + i[0] + " AS " + i[1].replace("\n"," ") + ";"
    Et effectivement, Python transforme sans autres ma colonne LONG en texte. Je vais encore regarder le lien de mnitu pour mieux comprendre ce qu'est ce type LONG.

    Merci encore et bonne journée!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2.x] Inclure une Entity dans toutes mes vues
    Par LordBob dans le forum Symfony
    Réponses: 2
    Dernier message: 18/11/2012, 20h12
  2. Réponses: 1
    Dernier message: 25/11/2011, 07h53
  3. [SQL Server] toutes mes tables se créent en dbo
    Par Tinfolley dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 23/03/2008, 19h41
  4. [SQL] Tout supprimé dans tout mes champ tout remettre à 0
    Par snakejl dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 01/06/2006, 17h12
  5. Récupérer le code SQL à partir d'une requête
    Par Edith_T dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 23/11/2004, 14h10

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