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éer une table avec nom de variable comme nom


Sujet :

SQL Procédural MySQL

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 19
    Par défaut Créer une table avec nom de variable comme nom
    Bonjour,

    j'essaie désespérément de faire quelque chose de très simple et je bute sur des pb de syntaxe.

    Je travaille sur une base mysql et pendant un temps je veux sauvegarder tous les jours une situation de certains enregistrements de ma table, dans une autre base
    J'ai besoin de cet historique au jour le jour en cas de pb ou de litiges.

    Et je veux que cela soit un script sql car cela doit être envoyé par le serveur par un outil mysqlautoBackup (il peut aussi envoyer des scripts)

    Mais je n'arrive pas à nommer automatiquement ma table de sauvegarde avec la date du jour.

    Voilà mes deux requetes dans le script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select @ntable:=concat('TWDLA_',date_format(curdate(),'%Y%m%d')) from dual;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create table savetwdla.TWDLA_20190321 select * from mabasesource.people_action where pac_type='TWDLA';
    donc 1ère requete pour me donner un nom de table dans la variable ntable comme TWDLA_20190321
    2ème requete pour extraire mes données de la base dans une base à part; sous le nom de TWDLA_AAAAMMJJ

    Mon problème : comment utiliser la variable @ntable dans mon ordre create ?

    2 h que je cherche la syntaxe sans succès.

    Je vous remercie de votre aide.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 588
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Si le besoin est uniquement la sauvegarde, il n'est pas nécessaire de recharger l'extraction dans une table. Conservez votre backup au chaud et rechargez la version requise au moment où le besoin s'en fait sentir dans la table bis dont le nom s'affranchit de la notion de date.
    Si le besoin est de recharger tous les jours afin par exemple de pouvoir consulter en temps réel les lignes dupliquées, ne créez qu'une seule table et ajoutez une colonne d'horodatage.
    Si le volume devient conséquent, partitionnez cette table d'archive (par exemple une partition par année)

    Dans tous les cas c'est complètement aberrant de faire une table par jour !

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 19
    Par défaut
    Bonjour
    je vous remercie de votre réponse mais cela n'est pas le sujet
    Cela fait plus de 30 ans que je fais de la base de données (AS400, Oracle, mysql, sqlserver) et je pense m'être fait de solides convictions en la matière.
    Donc c'est bien le point de programmation particulier qui m'intéresse car cela répondait rapidement à un besoin de contrôle et de réactivité, pas à un besoin d'organisation de mon modèle.

    Effectivement je peux charger tout en base de sauvegarde en une seule table avec le même type de requête. Je retiens votre idée et je vous en remercie.

    Il n'en reste pas moins que techniquement ce que je cherchais à faire pourrait m'intéresser pour d'autres utilisations; et donc j'aimerai en connaitre la syntaxe.
    Encore merci de votre réponse.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 19
    Par défaut
    re-bonjour
    je remercie encore Escartefigue de sa réponse car c'est vrai que l'approche était plus intelligente.
    C'est donc ce que j'ai mis en place.

    mais comme dit avant, je voulais savoir comment le faire en utilisant une variable en fichier.
    Donc voici la réponse que l'on m'a donnée sur un autre forum et que je livre ci dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    set @table_name = concat('savetwdla.TWDLA_',date_format(curdate(),'%Y%m%d'));
    set @sql = concat('CREATE TABLE ',@table_name,' select * from mabasesource.people_action where pac_type=''TWDLA'';');
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    donc pb résolu
    Merci à tous de votre aide

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

Discussions similaires

  1. comment créer une table avec un nom variable ( le mois actuel)
    Par sarah_insat dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 18/02/2011, 18h00
  2. Créer une table au nom aléatoire
    Par bilay dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 18/01/2007, 09h41
  3. créer une table avec interbase
    Par solidleon dans le forum Bases de données
    Réponses: 3
    Dernier message: 01/11/2006, 15h39
  4. [Conception] Créer une table avec php
    Par freezerhm dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 29/10/2006, 12h15
  5. Créer une table avec SELECT
    Par eric37 dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/08/2006, 00h34

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