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 :

Requete INSERT INTO par paquet


Sujet :

SQL Procédural MySQL

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 58
    Par défaut Requete INSERT INTO par paquet
    Hello

    Je cherche un moyen de fragmenter cette requête mysql insérant les lignes de TABLE2 dans TABLE1 :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO TABLE1
    SELECT * TABLE2

    L'idée est de créer une procédure stockée qui prend en paramètre TABLE1, TABLE2, Size (taille des paquets).

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    Stored_Procedure(in Table TableFrom, in Table TableTo, in int size)

    On aurait plusieurs requêtes qui insèrent des éléments par paquet de taille 'size' de TABLE2 vers TABLE1.

    Par exemple si on a 210 rows dans TABLES2 et qu'on paramètre size=50. Le fonctionnement serait (en utilisant limit x, y par exemple)

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    INSERT INTO TABLE1
    SELECT * TABLE2 ORDER BY ID DESC limit 1, 51
     
    INSERT INTO TABLE1
    SELECT * TABLE2 ORDER BY ID DESC limit 52, 102
     
    INSERT INTO TABLE1
    SELECT * TABLE2 ORDER BY ID DESC limit 102, 152
     
    INSERT INTO TABLE1
    SELECT * TABLE2 ORDER BY ID DESC limit 153, 203
     
    INSERT INTO TABLE1
    SELECT * TABLE2 limit ORDER BY ID DESC 203, 210

    Peut-être que j'ai aussi besoin de récupérer le numéro de la ligne à chaque fois etc.
    Quelqu'un aurait une idée pour découper cette query ?

    Merci

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Par défaut
    Bonjour,

    pourquoi veut-tu découper cette requête ? Trop de ligne dans ta table1 ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 58
    Par défaut
    Hello,

    J'ai oublié de préciser que dans mon scénario : TABLE1 est vide. TABLE2 contient beaucoup de lignes.
    Le but est de copier la TABLE2 dans TABLE1.
    Le est une copie massive qui plante en production. Du coup, on espère découper la requête (même si elle risque de prendre un peu plus de temps d'éxécution)

  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
    Billets dans le blog
    1
    Par défaut
    salut,

    ce truc pondu en 5 minutes devrait te faire le boulot, à tester sur des copie avant de se lancer quand même:
    Code sql : 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
    delimiter $$
    drop procedure if exists table_copie$$
    create procedure table_copie(in source varchar(64),in destination varchar(64),in id_nom varchar(64), in quantite int unsigned)
    begin
    	set @req=concat('insert into `',destination,'` select * from source limit ',quantite);
    	prepare exe from @req;
    	execute exe;
    	deallocate prepare exe;
    	set @req=concat('select max(`',id_nom,'`) into @n from `',destination,'`');
    	prepare exe from @req;
    	execute exe;
    	deallocate prepare exe;
    	set @req=concat('delete from `',source,'` where `',id_nom,'`<=',@n);
    	prepare exe from @req;
    	execute exe;
    	deallocate prepare exe;
    end$$
    delimiter ;
    je pars sur le principe que tu dois mettre le nombre de ligne raisonnable, quantite, pour faire la mise à jour... ainsi que le nom de la colonne qui est la clé primaire de la source et que les tables sont identique en terme de structure...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 58
    Par défaut
    Hello

    Merci pour le feedback !
    ça fera l'affaire. Je met en résolu

    Par contre j'ai un doute quant au "select". A mon avis, il faut faire un "order by " pour garantir que le select renvoie les éléments dans le même ordre.

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

Discussions similaires

  1. pd codage ASP : Pb requete insert into
    Par leclone dans le forum ASP
    Réponses: 10
    Dernier message: 19/05/2006, 18h02
  2. Probleme de requete 'Insert Into'
    Par azerty53 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/05/2006, 14h33
  3. Requete INSERT INTO
    Par cheers94wow dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/05/2006, 11h13
  4. petite aide sur une requete INSERT INTO
    Par bonneti dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/03/2005, 15h17
  5. Erreur lors d'une requete insert into.. select
    Par Mr N. dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 04/11/2004, 17h32

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