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

Linux Discussion :

Script de creation


Sujet :

Linux

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2004
    Messages
    532
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 532
    Points : 144
    Points
    144
    Par défaut Script de creation
    salut,

    J'ai un fichier qui contient une description des table systemes (nom,champs,type...) et je souheterais à partir de ce fichier generer un script qui me permettrait de créer toutes ses tables à partir des infos contenu dans ce fichier.
    J'aurai aimé savoir si c'est possible de le faire avec un script shell ou s'il y a plus simple ?

    SI c'est compliqué ? et si vous avez quelque piste ?

    Merci à tous

  2. #2
    Membre actif
    Avatar de vosaray
    Profil pro
    Architecte technique
    Inscrit en
    Mai 2004
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2004
    Messages : 217
    Points : 299
    Points
    299
    Par défaut
    Bonjour,

    La descritption du probleme ne me parrait pas tres claire.

    J'ai compris que tu disposais d'un fichier qui contient des descriptions de table d'une base de données.

    Tu voudrais processer ton fichier et le transformer en script SQL qui va effectuer la cration des tables dans la base.

    C'est cela ?

    Si c'e'st le cas peu importe le language que tu vas utiliser, pour le peu que le script sql resultant fonctionne .

    Le tout depend de la complexité de ton fichier de description. Personellement pour des problemes de ce type j'utiliserais Perl, mais ce n'est pas une obligation. Si ca se trouve un shell avec des cut, awk et cie suffit largement ....

    Si tu veux plus d'infos, poste un bout de ton fichier de description ainsi que le type de BD sur laquelle tu travailles .

    Si le probleme ne se pose pas en ces termes, une petite reformulation serait la bienvenue

  3. #3
    Membre habitué
    Inscrit en
    Janvier 2004
    Messages
    532
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 532
    Points : 144
    Points
    144
    Par défaut
    tu a bien compris;
    voila ce que j'ai

    CDCOM,QUAR,2,SMALLINT
    CDDEP,QUAR,1,SMALLINT
    CDPAY,QUAR,4,CHAR
    CDCOM,QUAR,2,SMALLINT
    CDDEP,QUAR,1,SMALLINT
    CDPAY,QUAR,4,CHAR
    FIRSTNAME,PHONE,2,VARCHAR
    LASTNAME,PHONE,1,VARCHAR
    NUMBER,PHONE,4,CHAR
    et je voudrais avoir cela en sortie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    create table QUAR (CDCOM SMALLINT (2), CDDEP  SMALLINT(1),..  ,CDPAY char(4));  
    create table PHONE(FIRSTNAME VARCHAR (2), ...,NUMBER char(4));

  4. #4
    Expert confirmé
    Avatar de Katyucha
    Femme Profil pro
    DevUxSecScrumOps Full Stack Bullshit
    Inscrit en
    Mars 2004
    Messages
    3 287
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Irlande

    Informations professionnelles :
    Activité : DevUxSecScrumOps Full Stack Bullshit

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 287
    Points : 5 075
    Points
    5 075
    Par défaut
    Compliqué ? Non

    Il faut juste te mettre au ksh.
    Un bon guide :
    http://marcg.developpez.com/ksh

    Par contre, vu l'architecture de ton fichier, ca risque d'etre un peu moyen

    Je te conseillerai plutot perl, qui est langage très bon en traitement de fichier (voir le TRES bon http://perl.developpez.com/tutoriel/cours1 pour apprendre)
    Grave urgent !!!

  5. #5
    Membre actif
    Avatar de vosaray
    Profil pro
    Architecte technique
    Inscrit en
    Mai 2004
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2004
    Messages : 217
    Points : 299
    Points
    299
    Par défaut
    Tu peux peut etre opter pour une solution mixte perl/shell, cela peut s'averer pratique dans ce cas.

    1/ Identifier les tables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cut -f2 -d',' fichier_definition | sort | uniq > table_names.list
    2/ pour chaque table creer un premier fichier contenant la definition des colonnes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    mkdir defs
    for i in `cat table_names.list` ; do 
       grep $i fichier_definition > defs/$i
    done
    3/ pour chaque liste de colonnes les transformer en sql "partiel" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i in `ls defs/*`; do 
       perl -pi -e 's/(.*)\, (.*)\,(.*),\,(.*)/$1 $4 \($3\) \,/' defs/$i
    done
    4/ rajouter le statement create table pour chacune des tables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    mkdir sql
    for i in `ls defs/*' ; do
       echo "create table $i (" >> sql/create.sql
       cat defs/$i >> sql/create.sql
       echo ");" >> sql/create.sql
    done
    Au final tu devrais avoir un fichier sql/create.sql qui ressemble a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    create table QUAR (
     CDCOM SMALLINT (2), 
     CDDEP  SMALLINT(1),
     ...
    );
    ...
    C'est pas une solution optimale, ( l'optimale serait de faire toutes les transformation dans un script Perl, cf tuto donné par Katyucha ), mais ca peut te depanner en te donnant un debut de solution. Apres a toi d'ameillorer la choze.

    PS : j'ai ecrit ca a la volée,sans linux ni cygwin à porté de main, alors c'est a tester et certainement a fignoler avant usage final .

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 106
    Points : 104
    Points
    104
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    for i in `cat tonfichier | cut -d "," -f2 | sort -u`
    do
    echo $i >> fic.tmp
    done
     
    for ligne in `cat fic.tmp`
    do
    chainesql="create table "$ligne
    for x in `cat tonfichier | grep $ligne`
    do
     
    chainesql=$chainesql" ("$1" "$4" ("$3")," 
     
    done
    echo $chainesql > Creation${ligne}.sql
    sed 's/","/$")"' Creation${ligne}.sql
    done
    Si tu vx tu ajoutes apres ca si tu es sous ORACLE,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for file in `ls *.sql`
    do
     
    sqlplus -s $VARCONEXION << EOF
    start $file
    EOF
     
    done

    Et voilà
    Amine

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/11/2006, 16h13
  2. [DEBUTANT] Script de création d'un déclencheur
    Par tripper.dim dans le forum Oracle
    Réponses: 6
    Dernier message: 25/09/2006, 16h20
  3. Recherche script pour creation d'un moteur de recherche
    Par Diss dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 24/08/2006, 15h36
  4. Cherche un Script de création et de gestion de formulaires
    Par tidou dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 29/06/2006, 16h07
  5. Réponses: 5
    Dernier message: 18/10/2005, 09h49

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