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 :

pb sur creation de tables


Sujet :

SQL Procédural MySQL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 57
    Par défaut pb sur creation de tables
    Bonjour,

    J'essaie dans une procedure stockée de creer une table dont le nom est stocké dans un VARCHAR
    voici mon 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
    15
    16
    17
    18
     
    BEGIN
     
    DECLARE newTableName VARCHAR(200) default '';
     
    -- la fonction f_GIVE_FREE_TABLE_NAME me donne
    -- un nom de table non encore utilisé
    SET newTableName = f_GIVE_FREE_TABLE_NAME();
     
    -- DROP inutile mais bon...
    DROP TABLE IF EXISTS newTableName;
    CREATE TABLE newTableName (
      `DATA0` VARCHAR(500) NOT NULL default 'default tempo value'
    )
    ENGINE = InnoDB
    COMMENT = 'Temp table';
     
    END
    Quelque soit la valeur stockée dans 'newTableName',
    ce code va me créer une table qui se nomera newTableName.

    Comment dois je faire?

    Merci

  2. #2
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Par défaut
    Il me semble que pour utiliser une variable en MySQL, il faut mettre un '@' devant:

    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 57
    Par défaut
    salut,

    Oui j'ai essayé mais je n'arrive pas à compiler avec '@'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    BEGIN
    SET [b]@newTableName[/b] = 'totoTable';
    CREATE TABLE [b]@newTableName[/b] (
      `DATA0` VARCHAR(500) NOT NULL default 'default tempo value'
    );
    END
    Dans ce cas j'ai une erreur 1064.

  4. #4
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Par défaut
    '@', c'est quand tu utilises ta variable. T'en met pas dans le SET !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET newTableName= 'totoTable';
    Par contre, dans un SELECT:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT @variable_utilisateur:= 'valeur'
    ...
    Au fait, pourquoi tu as besoin de créer des tables dont le nom change? Si c'est pour faire des tables temporaires, tu as une syntaxe particulière pour cela... (CREATE TEMPORARY TABLE)
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 57
    Par défaut
    Merci

    Citation Envoyé par pcaboche
    Au fait, pourquoi tu as besoin de créer des tables dont le nom change? Si c'est pour faire des tables temporaires, tu as une syntaxe particulière pour cela... (CREATE TEMPORARY TABLE)
    En fait, j'ai une procedure stockée qui doit travailler avec une table temporaire, le probleme est que cette meme procedure stockée peut etre appelé par plussieurs programmes java en meme temps.
    J'aimerai eviter que tout les programmes java s'emmelent les pinceaux et recoivent des données non en accord avec les parametres qu'ils peuvent envoyés à la procedure stockée...
    .. Je ne sais pas trop si j'ai etais claire, là


  6. #6
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Salut,

    Il me semble que tu peux faire ça avec un prepared statement :

    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
     
    BEGIN
     
    DECLARE newTableName VARCHAR(200) default '';
     
    SET newTableName = f_GIVE_FREE_TABLE_NAME();
     
    SET @requete := CONCAT('CREATE TABLE ',
                                    newTableName,
                                    ' (`DATA0` VARCHAR(500) NOT NULL default \'default tempo  value\'
                                           )
                                           ENGINE = InnoDB
                                           COMMENT = \'Temp table\';'
                                    );
     
        PREPARE requete FROM @requete;
        EXECUTE requete;
        DEALLOCATE PREPARE requete;
     
    END
    (à vérifier pour les \' à l'intérieur du CONCAT)

    cf http://www.futhark.ch/mysql/106.html

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 57
    Par défaut
    Merci :p

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

Discussions similaires

  1. [2012] Creation de table sur base existante et securite
    Par Lafleur2012 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 09/04/2014, 10h46
  2. [AC-2003] Problèmes sur lancement d'une requete creation de table depuis VBE
    Par Jeanpierre71 dans le forum VBA Access
    Réponses: 8
    Dernier message: 22/12/2011, 21h12
  3. Réponses: 12
    Dernier message: 12/12/2004, 14h25
  4. Creation de table multi base
    Par baboune dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 20/02/2004, 09h23
  5. Creation de table, caractère non reconnu
    Par Missvan dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 17/02/2004, 13h28

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