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

PL/SQL Oracle Discussion :

Incrémentation d'une valeur dans une boucle


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 67
    Par défaut Incrémentation d'une valeur dans une boucle
    Bonjour,
    un problème résolu, un autre qui arrive. Provisoirement développeur en PL/SQL, j'ai besoin de votre aide.
    J'ai une table avec un champ "NUM" dont la valeur numérique s'incrémente à chaque insertion en table. Une clé primaire a été créée sur ce champs.
    Cette incrémentation n'est pas automatique mais manuel.
    Lorsque je fais de l'insertion ligne à ligne, je n'ai pas de problème.
    Le problème est quand je veux faire une insertion de plusieurs lignes dans une même requete.
    J'aimerais savoir comment faire pour incrémenter la valeur de ce champ à chaque insertion.
    Je pensais utiliser une boucle LOOP :

    FOR Rec in (select NUM, ID FROM TEMP0) LOOP
    INSERT INTO TABLE(NUM, ID) VALUES (NUM, ID)
    END_LOOP

    Je dois récupérer la valeur précédemment insérée en table et lui ajouter 1

    Merci de votre aide

  2. #2
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Bonjour,

    Tu dois utiliser un curseur pour cela puis boucler dessus.

    Ces tutos sont super, perso j'ai tout appris avec eux.

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Enfin il faut surtout utiliser une séquence.

    Sinon il faut locker toute la table avant de récupérer le max, puis utiliser une syntaxe ensembliste plutôt qu'un curseur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO TABLE(NUM, ID)
    select max_num + rownum, ID FROM TEMP0;
    Mais la vrai réponse est la séquence !

  4. #4
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Effectivement, je n'ai pas encore l'habitude d'utiliser la méthode ensembliste...

    Par contre je suis curieuse, qu'entends-tu par sequence ?

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 67
    Par défaut
    Merci pour vos réponses.
    Mais mon problème est que la première valeur à insérer est le MAX du champs des enregistrements déjà présent en table.

    Exemple: la valeur max de ce champs est 210230.
    Si je veux insérer 10 lignes de ma table temporaire TEMP0, je dois récupérer la valeur 210230 et ajouter + 1 à chaque insertion pour avoir 210231, 210232, 210233, etc ...

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Citation Envoyé par lola06 Voir le message
    Par contre je suis curieuse, qu'entends-tu par sequence ?
    C'est ce qu'il faut utiliser pour générer des clés primaires.

    Les séquences Oracle
    CREATE SEQUENCE

    Citation Envoyé par BenMarcel Voir le message
    je dois récupérer la valeur 210230 et ajouter + 1
    He ben rownum va ajouter 1 à chaque ligne... mais ça ne fonctionne pas si la table est utilisée par d'autres personnes en même temps, c'est pour ça qu'on utilise des séquences (pour éviter de locker toute la table)

    Ben Marcel j'ai édité la requête précédente ou j'avais laissé le VALUES...

  7. #7
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 67
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    C'est ce qu'il faut utiliser pour générer des clés primaires.

    Les séquences Oracle
    CREATE SEQUENCE


    He ben rownum va ajouter 1 à chaque ligne... mais ça ne fonctionne pas si la table est utilisée par d'autres personnes en même temps, c'est pour ça qu'on utilise des séquences (pour éviter de locker toute la table)

    Ben Marcel j'ai édité la requête précédente ou j'avais laissé le VALUES...
    Merci beaucoup, cela fonctionne parfaitement
    Meri aussi à Lola pour son aide

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. quand je selectionne une valeur dans une liste, retourne une autre valeur
    Par nsqualli dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/12/2008, 14h23
  3. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  4. Réponses: 1
    Dernier message: 25/09/2006, 17h15
  5. Mettre une valeur d'une table dans une variable
    Par Raphou96 dans le forum Access
    Réponses: 5
    Dernier message: 06/02/2006, 15h19

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