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

Langage SQL Discussion :

Procédure de création de table


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services à domicile

    Informations forums :
    Inscription : Septembre 2005
    Messages : 197
    Points : 122
    Points
    122
    Par défaut Procédure de création de table
    Bonjour,
    J'ai la procédure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE PROCEDURE BackupSyslogData()
    BEGIN
        DECLARE v_table_name CHAR(14);
        DECLARE v_date CHAR(8);
        SET v_table_name = CONCAT('syslog_', DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y_%m'));
        SET v_date = CONCAT(DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m'), '%');
     
        CREATE TABLE v_table_name
        SELECT *
        FROM syslog
        WHERE datetime LIKE v_date;
    END;
    Elle fonctionne presque à part que la table ainsi créée se nomme v_table_name, ce qui est normal me direz vous car je ne vois pas du tout comment faire prendre en compte le contenu de cette variable.
    Je me suis certainement planté quelque part au niveau écriture du code.
    Merci d'avance pour votre aide

    Stéphane

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 392
    Points
    28 392
    Par défaut
    Il faut utiliser EXECUTE IMMEDIATE pour traiter le code généré dynamiquement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    EXECUTE IMMEDIATE 'CREATE TABLE ' || v_table_name 
        || ' SELECT *'
        || ' FROM syslog'
        || ' WHERE datetime LIKE ' || v_date ||';' ;

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services à domicile

    Informations forums :
    Inscription : Septembre 2005
    Messages : 197
    Points : 122
    Points
    122
    Par défaut
    Merci pour ta réponse mais tu es sur pour les ' car mysql n'en veux pas de ces carractères, me suis pas plantés tout de même ?

    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
     
    DELIMITER :
     
    CREATE PROCEDURE BackupSyslogData()
    BEGIN
        DECLARE v_table_name CHAR(14);
        DECLARE v_date CHAR(8);
        SET v_table_name = CONCAT('syslog_', DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y_%m'));
        SET v_date = CONCAT(DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m'), '%');
     
        EXECUTE IMMEDIATE 'CREATE TABLE ' || v_table_name || ' SELECT * FROM syslog WHERE datetime LIKE ' || v_date ||';' ;
    END;
    :
     
    DELIMITER ;
    Stéphane

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 392
    Points
    28 392
    Par défaut
    Je t'ai donné une réponse conforme à la norme SQL, sans rien modifier de ce que tu avais préparé par ailleurs.
    Je ne sais pas si MySQL accepte cette syntaxe.

    En précisant le SGBD que vous utilisez et sa version, les réponses proposées seront adaptées aux spécificités et limitations de celui-ci.
    Règles du forum Langage SQL à lire par tous

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services à domicile

    Informations forums :
    Inscription : Septembre 2005
    Messages : 197
    Points : 122
    Points
    122
    Par défaut
    Ok, je vais chercher un peu comment utiliser tout ça avec mysql
    Merci

    Stéphane

Discussions similaires

  1. [2008R2] Problème sur une procédure pivot + création de table
    Par libremax dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 14/10/2014, 21h21
  2. Pb procédure stockée création de table
    Par Tleconte dans le forum Administration
    Réponses: 2
    Dernier message: 01/08/2009, 08h18
  3. (VC++6 /C) Pb de création de table Paradox
    Par Vow dans le forum Paradox
    Réponses: 4
    Dernier message: 28/09/2004, 13h15
  4. Création de table avec index
    Par Seb7 dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/04/2003, 16h11
  5. Création multiple table paradox dans le code
    Par scarabee dans le forum C++Builder
    Réponses: 8
    Dernier message: 30/10/2002, 10h17

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