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

 MySQL Discussion :

Utiliser une variable comme nom de table ou de base de donnée


Sujet :

MySQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 141
    Points : 142
    Points
    142
    Par défaut Utiliser une variable comme nom de table ou de base de donnée
    Bonjour,

    Je souhaite écrire un script MySQL de mise à jour du format d'une base de donnée, du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE `maBase`.`maTable1` (
      `ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
      `Col1_1` VARCHAR(255),
      `Col1_2` INT NOT NULL);
     
    CREATE TABLE `maBase`.`maTable2` (
      `ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
      `Col2_1` VARCHAR(255),
      `Col2_2` INT NOT NULL);
     
    etc...
    Pour pouvoir facilement changer la base sur laquelle appliquer ces modifications, je comptais utiliser une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SET @maBase = "maBaseTest";
     
    CREATE @maBase.`maTable1`( ...
    Mais cette syntaxe ne marche pas.

    Comment faut-il faire, en MySQL, pour utiliser le contenu d'une variable comme nom de base ou de table dans une requête ?

    Merci d'avance,

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Bonjour,

    Pour ça, il va falloir passer par les commandes préparées : http://dev.mysql.com/doc/refman/5.0/fr/sqlps.html

    ced

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 141
    Points : 142
    Points
    142
    Par défaut
    Citation Envoyé par ced Voir le message
    Pour ça, il va falloir passer par les commandes préparées : http://dev.mysql.com/doc/refman/5.0/fr/sqlps.html
    Ok, merci pour le lien.

    Et si j'encapsule la séquence des "CREATE" dans une procédure ? Il faut que je fasse une requête préparée par table que je veux ajouter ? ou est-ce qu'il y a un moyen de déclarer que l'argument passé en entrée est une référence à une table ou à une base ?

    Ce que je voudrais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE PROCEDURE creerTables( IN {baseRef} @maBase )
    BEGIN
      CREATE TABLE @maBase.`table1`(...);
      CREATE TABLE @maBase.`table2`(...);
      ...
    END
    où {baseRef} serait un mot-clé indiquant que "maBase" contient une référence à une base.


    De ce que je comprends de ta réponse, ced, même en créant une procédure, il faudrait que j'écrive :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE PROCEDURE creerTables( IN @maBase )
    BEGIN
      PREPARE stmt1 FROM 'CREATE TABLE ?.`table1` (...)';
      EXECUTE stmt1 USING @maBase;
      DEALLOCATE PREPARE stmt1;
     
      PREPARE stmt2 FROM 'CREATE TABLE ?.`table2` (...)';
      EXECUTE stmt2 USING @maBase;
      DEALLOCATE PREPARE stmt2;
     
      ...
    END
    Il n'y a rien de plus élégant ?

Discussions similaires

  1. Utiliser une variable comme nom de table Access dans une requête SQL
    Par stsym dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/10/2011, 17h11
  2. [ProC][SQL] Utiliser une variable comme nom de curseur
    Par adiGuba dans le forum Interfaces de programmation
    Réponses: 1
    Dernier message: 06/12/2006, 11h55
  3. Utiliser une variable comme nom de fichier
    Par lo00_ dans le forum MATLAB
    Réponses: 1
    Dernier message: 28/06/2006, 13h57
  4. donner la valeur d'une variable comme nom de table
    Par cladsam dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 14/10/2005, 15h16
  5. [curseurs] utiliser une variable comme nom de champ
    Par Christian31 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2005, 14h12

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