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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 291
    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 291
    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 291
    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 291
    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 ...

+ 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, 11h55
  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, 12h16
  3. Empêcher la création de nouvelles bases
    Par Dertron dans le forum Requêtes
    Réponses: 6
    Dernier message: 31/08/2006, 11h35
  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, 14h26
  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, 10h08

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