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 Procédural MySQL Discussion :

Création dynamiques nouvelles bases


Sujet :

SQL Procédural MySQL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 32
    Par défaut Création dynamiques nouvelles bases
    Bonjours à tous,

    J'aimerais savoir s'il est possible de créer dynamiquement de nouvelles bases en fonction d'une autre base?

    Je m'explique:
    Je travaille sur une plateforme de e-learning claroline.
    J'ai une base "claroline" contenant une table "cours" avec dedans un champ "db_name".
    Vous l'aurez compris, ce champ contient le nom des nouvelles bases que je dois créer.
    J'ai pour l'instant essayé avec une procédure dont voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    DELIMITER $
    DROP PROCEDURE crea_database$
    CREATE PROCEDURE crea_database()
    BEGIN
    DECLARE database_name VARCHAR (40);
    DECLARE curseur_db CURSOR FOR
    SELECT dbName FROM cours;
    OPEN curseur_db;
    FETCH curseur_db INTO database_name;
    CLOSE curseur_db;
    CREATE DATABASE database_name;
    END;
    $
    DELIMITER ;
    Seulement, ce code me crée une nouvelle base nommée (ce qui est logique) database_name ...

    Si quelqu'un a une solution pour moi, ou même ne serai-ce qu'une piste, je suis preneur !

    D'avance merci pour votre aide !

    Jonathan.

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    La seule solution interne à MySQL, ce sont les prepared statements (voir doc http://dev.mysql.com/doc/refman/5.1/...tatements.html). Mais je ne suis pas du tout sûr qu'ils acceptent le DDL.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 32
    Par défaut
    Merci pour la réponse

    Je teste ça tout de suite !

    Jonathan.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 32
    Par défaut
    Arg j'ai l'impression de pédaler dans la semoule !

    J'ai écrit ça:
    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
    18
     
    DELIMITER $
    DROP PROCEDURE crea_database$
    CREATE PROCEDURE crea_database()
    BEGIN
    DECLARE database_name VARCHAR (40);
    DECLARE curseur_db CURSOR FOR
    SELECT dbName FROM cl_cours;
    OPEN curseur_db;
    FETCH curseur_db INTO database_name;
    SET @requete = CONCAT ('CREATE DATABASE ', database_name, ';');
    PREPARE statement1 FROM @requete;
    EXECUTE statement1;
    DEALLOCATE PREPARE statement1;
    CLOSE curseur_db;
    END;
    $
    DELIMITER ;
    Cette requête ne plante pas, mais elle ne fait rien du tout...

    Voyez-vous des erreurs dedans ? Suis-je complétement à côté de la plaque ? Ou bien pas trop loin de la plaque ?

    Cordialement,
    Jonathan.

  5. #5
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    Le CREATE DATABASE n'est possible en prepared statement qu'à partir de la version 5.1.12... est-ce que tu en es là ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 32
    Par défaut
    Version 5.1.36 donc c'est bon pour la version ...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 32
    Par défaut
    Arf, idiot que je suis, j'avais oublié d'appeler la procédure que j'avais testé !

    Bon, le code ci-dessus me crée donc une nouvelle base, la première de ma table contenant mes cours, à condition que celle-ci n'existe pas déjà, mais ne passe pas au enregistrements suivant pour créer les autre bases...

    On avance un peu, mais ce n'est pas encore ça !

  8. #8
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    ... pas trop loin :


    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    DELIMITER $
    DROP PROCEDURE crea_database$
    
    CREATE PROCEDURE crea_database()
    BEGIN
    DECLARE done INT DEFAULT 0;
    DECLARE database_name VARCHAR (40);
    DECLARE curseur_db CURSOR FOR SELECT dbName FROM cl_cours;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    
    
    OPEN curseur_db;
    
    repeat 
      FETCH curseur_db INTO database_name;
      IF NOT done then
        SET @requete = CONCAT ('CREATE DATABASE IF NOT EXISTS ', database_name, ';');
        PREPARE statement1 FROM @requete;
        EXECUTE statement1;
        DEALLOCATE PREPARE statement1;
      END IF ;
    
    until done end repeat ;
    
    CLOSE curseur_db;
    END;
    $
    DELIMITER ;

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 32
    Par défaut
    Je m'en étais encore approché un peu plus avec la boucle repeat et le "done" pour en sortir

    Mais c'est vrai que ça va être mieux avec en plus la boucle if en plus !

    En tout cas, merci Antoun !

    Je marque le sujet comme résolu

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

Discussions similaires

  1. Création dynamique de base de données
    Par bachirghazaouet dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 16/09/2013, 12h55
  2. Création de nouvelle bases et connexion (passerelle avec claroline)
    Par terminathan dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 25/01/2010, 13h16
  3. Empêcher la création de nouvelles bases
    Par Dertron dans le forum Requêtes
    Réponses: 6
    Dernier message: 31/08/2006, 12h35
  4. [Firebird - D7] Erreur - Création dynamique d'une base
    Par EGI dans le forum Bases de données
    Réponses: 5
    Dernier message: 29/03/2005, 15h26
  5. Création d'une base PARADOX dynamiquement ? tutorial ?
    Par BXDSPORT dans le forum Bases de données
    Réponses: 1
    Dernier message: 16/07/2004, 11h08

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