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

Requêtes MySQL Discussion :

INSERT multiple avec valeur à incrémenter


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Gérant d'une petite société
    Inscrit en
    Décembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Gérant d'une petite société
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2013
    Messages : 7
    Points : 12
    Points
    12
    Par défaut INSERT multiple avec valeur à incrémenter
    Bonjour,

    Dans le cadre d'une migration de données, j'ai besoin de créer plusieurs enregistrements dans une table, dont la clé n'est pas en auto-increment, et la valeur de cet identifiant est du VARCHAR.

    Je prends le max() du champ à incrémenter, récupère la partie chiffre, que je transforme en integer, et que j'augmente de 1.
    Ceci fonctionne, mais uniquement sur la première requête, car le max est récupérer une seule fois au début de la requête.
    Comme cette requête est censé créer qq milliers de lignes en une seule exécution, il faudrait un genre de compteur d'insert.

    Je ne peux modifier la structure de la table.

    je suis sous Mysql.

    Merci par avance.

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    insert into prestation (identifiant_prestation, fk_type_prestation_version, fk_etat_prestation, fk_contrat, no_commande_ft, no_ligne_commande, 
    						code_offre_composee, code_offre, date_ar, date_creation, date_mes_technique, date_mes_commercial, date_maj, utilisateur_maj, 
    						date_mes_retenue, date_contractuelle_opus, indicateur_resiliation, date_facturation_fas, date_declenchement_facturation, 
    						contractant_representant, contractant_rue, contractant_code_postal, contractant_localite, contractant_telephone, contractant_telecopie,
    						installation_code_postal, installation_localite, installation_telephone_site, installation_telecopie, version_jpa)
    
     select CONCAT('COL0',CAST(((cast(substring((select max(identifiant_prestation) as p from prestation), 4) AS SIGNED INTEGER))+ 1) AS CHAR)),
    		(select tpv3.id
    		from type_prestation_version tpv3, type_prestation tp3, type_ligne_commande tc3, type_ligne_commande_version tcv3
    		where tp3.code = 'GCBLO_PE_FTVX'
    		and tc3.code = 'GCBLO_STR'
    		and tcv3.version_commande = 'V2'
    		and tpv3.fk_type_prestation = tp3.id
    		and tpv3.fk_type_ligne_commande_version = tcv3.id
    		and tcv3.fk_type_ligne_commande = tc3.id),
    		3, p.fk_contrat, ec.no_commande_ft, 1, ec.code_offre_composee, tc.fk_offre, 
    		p.date_ar, mg.date_migration, mg.date_migration, mg.date_migration, mg.date_migration,  'migration', mg.date_migration, p.date_contractuelle_opus, 
    		0, p.date_facturation_fas, p.date_declenchement_facturation, p.contractant_representant, p.contractant_rue, p.contractant_code_postal, p.contractant_localite,
    		p.contractant_telephone, p.contractant_telecopie, p.installation_code_postal, p.installation_localite, p.installation_telephone_site, installation_telecopie, 0
    from entete_commande ec, ligne_commande lc, migration_gcblo mg, ligne_prestation lp, prestation p, type_prestation_version tpv, type_ligne_commande_version tcv, type_ligne_commande tc, type_prestation tp
    where ec.id = mg.fk_entete_commande
    and mg.indicateur_migration_realisee = 0
    and mg.indicateur_rejet = 0
    and mg.code_operation = 'CSTR'
    and mg.fk_operateur = (select id from operateur where operateur_siren = 488095803)
    and lc.fk_entete_commande = ec.id
    and lc.id = lp.fk_ligne_commande
    and p.identifiant_prestation = lp.fk_prestation
    and tpv.id = p.fk_type_prestation_version
    and tcv.id = tpv.fk_type_ligne_commande_version
    and tc.id = tcv.fk_type_ligne_commande
    and tc.code = 'GCBLO_STR'
    and tcv.version_commande = 'V2'
    and tp.id = tpv.fk_type_prestation
    and tp.code = 'GCBLO_PE_STR'
    ;

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Avec mysql, il faut passer par une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    mysql> set @r := 0;
    Query OK, 0 rows affected (0.00 sec)
     
    mysql> select @r:=@r+1, c from test;
    +----------+------------+
    | @r:=@r+1 | c          |
    +----------+------------+
    |        1 | test1      |
    |        2 | test2      |
    |        3 | testjshfjf |
    +----------+------------+
    3 rows in set (0.00 sec)
     
    mysql>

  3. #3
    Membre à l'essai
    Homme Profil pro
    Gérant d'une petite société
    Inscrit en
    Décembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Gérant d'une petite société
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2013
    Messages : 7
    Points : 12
    Points
    12
    Par défaut
    Merci pour la réponse, ça fonctionne !

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

Discussions similaires

  1. Insertion multiple avec incrémentation
    Par Beaudelicius dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 17/05/2012, 16h58
  2. [AC-2003] Insertion avec valeur incrémentée
    Par walker34 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 28/09/2009, 17h54
  3. Requête d'insertion multiple avec 1 valeur fixe
    Par [DreaMs] dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/12/2005, 10h28
  4. [debutant][code] insert multiple de valeurs
    Par topaze dans le forum Oracle
    Réponses: 9
    Dernier message: 29/11/2005, 16h22
  5. INSERT multiples avec : rs.AddNew et .Update
    Par M.Zip dans le forum ASP
    Réponses: 4
    Dernier message: 03/12/2004, 16h53

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