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 :

Procédure avec CREATE TABLE AS SELECT


Sujet :

SQL Procédural MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 18
    Points : 11
    Points
    11
    Par défaut Procédure avec CREATE TABLE AS SELECT
    Bonjour,

    Voila je souhaite faire une procédure stockée afin de pouvoir faire une sauvegarde d'une table en créant une nouvelle table avec pour nom 'nomDeLaTable_dateDuJour'.

    La requête créée est 'CREATE TABLE SAISIES_20120716 AS SELECT * FROM SAISIES' qui fonctionne très bien.

    le problème vient quand j’exécute la procédure, j'obtiens l'erreur '#1312 - PROCEDURE Anadefi.sauvegarde can't return a result set in the given context'

    Je comprends pas vraiment pourquoi j'ai cette erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE DEFINER=`root`@`localhost` PROCEDURE `sauvegarde`()
    BEGIN
     
    SELECT CURDATE() + 0 into @date;
    SET @tblname = CONCAT('SAISIES_', @date);
    SET @sql = CONCAT('CREATE TABLE ', @tblname);
    SET @sql = CONCAT(@sql, ' AS SELECT * FROM SAISIES');
     
    PREPARE stmt FROM @sql ;
    EXECUTE stmt ;
    DEALLOCATE PREPARE stmt ;
    END
    Merci d'avance.

  2. #2
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    déjà en réécrivant un peu mieux avec un truc comme:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    delimiter $$
    drop procedure if exists sauvegarde$$
    create procedure sauvegarde(in origine varchar(64))
    begin
      set @sql=concat('create table `',origine,'_',curdate(),'` as select  * from `',origine,'`');
      PREPARE stmt FROM @sql ;
      EXECUTE stmt ;
      DEALLOCATE PREPARE stmt ;
    end$$
    delimiter ;
    call sauvegarde('saisies');
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    effectivement, ça fait beaucoup plus propre comme ça même si mon problème reste le même.

  4. #4
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    je l'ai tester sure une de mes bases la procédure marche parfaitement... et ça m'a bien copié les 2 tables sur lesquelles je l'ai testée...

    le seul soucis du create select est que ça ne te copie pas les index autres que la clé primaire, ça faut le savoir...

    tu as donc un réglage spécial de mysql... je ne pense pas sur la table... normalement ça ne copie pas les contraintes...

    tu aurais pas la table destination déjà créée? si oui faut rajouter replace ou ignore et selon la version de mysql if not exists:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    delimiter $$
    DROP procedure IF EXISTS sauvegarde$$
    CREATE procedure sauvegarde(IN origine varchar(64))
    begin
      SET @sql=concat('create table if not exists `',origine,'_',curdate(),'` replace select  * from `',origine,'`');
      PREPARE stmt FROM @sql ;
      EXECUTE stmt ;
      DEALLOCATE PREPARE stmt ;
    end$$
    delimiter ;
    call sauvegarde('saisies');

    au fait, l'erreur parle du contexte d'appel, tu l'appelles dans quoi et comment?
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Pour le moment j'appelle la procédure de phpMyAdmin ( client MySQL: 1.17-beta, phpMyAdmin Version: 3.3.9.2 ) mais je compte l’appeler à partir de php avec PDO.
    si la procédure fonctionne et que c'est une erreur de contexte, je peux tester directement en php.
    ma table de destination n’existe pas quand je l'appelle sinon.

  6. #6
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    c'est normal phpmyadmin n'est pas compatible avec les procédures stockée à cause de la possibilité de résultats multiples...

    c'est pas grave ça te montre d'autres possibilités pour les create table...select

    phpmyadmin n'est bon qu'a faire de l'administration et tester vite fait une requête...

    faut que tu regardes à avoir un outils plus poussé pour tes tests en local...
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Youhou, j'ai testé avec l'objet PDO et ça fonctionne niquel. je sais pas vraiment pourquoi ça ne fonctionne pas de phpMyAdmin mais c'est pas bien grave. Maintenant je sais, vive phpMyAdmin

    Par conséquent, tu aurais des outils un peu plus poussé à me proposer ?

    Merci pour l'aide et les différentes informations.

  8. #8
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    si tu es sous windows, tu as par exemple:
    • heidisql, celui que j'utilise principalement
    • mysql workbench

    si tu utilisent une bd distante accessible de l'extérieur, ils peuvent s'y connecter...

    mais il y en a d'autres...
    il y a un post sur le forum, je sais plus où, où les gens disent quel outils ils préfèrent...
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Yes ça marche, je vais fouiller un peu le forum.

    Merci et bonne journée.

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

Discussions similaires

  1. CREATE TABLE .... AS SELECT
    Par blids dans le forum SQL
    Réponses: 5
    Dernier message: 13/10/2016, 14h00
  2. Create Table As (select Union Select )
    Par cactus2078 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 27/07/2009, 12h54
  3. DELETE vs CREATE TABLE as SELECT
    Par beanl dans le forum Administration
    Réponses: 4
    Dernier message: 02/07/2007, 10h59
  4. Surveiller 'CREATE TABLE AS SELECT'
    Par mjag dans le forum Administration
    Réponses: 4
    Dernier message: 26/12/2006, 11h42
  5. Pb avec CREATE TABLE "dynamique"
    Par forzaxelah dans le forum Bases de données
    Réponses: 1
    Dernier message: 19/07/2006, 13h14

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