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 :

Ma séquence attribue un même numéro


Sujet :

PL/SQL Oracle

  1. #1
    Invité
    Invité(e)
    Par défaut Ma séquence attribue un même numéro
    Bonjour,
    J'ai un souci avec ma sequence.quand je saisi elle m'attribut le meme numero.par exemple si je fait la peremiere saisi elle me donne le numero 2020201 quand je passe une nouvelle saisi elle attribut le meme 2020201 en me demandant voulez vous enregistrer les modification?
    Merci de me lire et
    Merci d'avance.

  2. #2
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Salut,

    Comment la séquence a t-elle été créée?
    Que donne sous SQLPlus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT dbms_metadata.get_ddl('SEQUENCE', 'nom_sequence', 'owner' from dual;
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  3. #3
    Invité
    Invité(e)
    Par défaut
    Au faite au début c'est la séquence qui a sauté plusieurs numéros. Apres je voudrais remplacer les numéros sauté par la sequence.
    Donc pour cela il faut toucher le programme. voila ce qui à été mais quand on saisie elle attribue le même numéro elle n'avance pas.
    Pourquoi elle n'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
    declare
    v_numd number;
    trouve varchar2(1);
    cursor c_numd is select numero_d from entete_dm where numero_d=v_numd;
    r_numd c_numd%rowtype;
     
     
    BEGIN
    	trouve:='n';
      v_numd:=20194001;
     
      while trouve = 'n' loop
      	open c_numd;
      	fetch c_numd into r_numd;
      		if c_numd%found then
      			v_numd:=v_numd+1;
     
      		else
      			trouve:='o';
      			:num_d:=v_numd;
      		end if;
      		close c_numd;
      end loop;
     
     
    END;

    Merci
    Dernière modification par al1_24 ; 02/09/2020 à 19h38. Motif: Balises CODE

  4. #4
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Ah mais ce n'est pas une vraie séquence...
    Une séquence c'est quand tu fais un CREATE SEQUENCE...

    Visiblement tu as un pb de boucle ou de test.
    Je te conseille d'utiliser dbms_output.put_line dans ta boucle pour afficher toutes les variables que tu utilises : ce sera une sorte de débuggage et tu devrais comprendre d'où viens le problème.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  5. #5
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Quelques conseils :
    1/ Pas de curseur quand tu fais juste un SELECT d'une seule valeur, il suffit de gérer le NO_DATA_FOUND quand la ligne n'existe pas
    2/ Pour les curseurs, mieux vaut utiliser une FOR LOOP END LOOP, que les OPEN CURSOR, FETCH, CLOSE CURSOR
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci beacucoup.
    J'ai pu m'ensortir avec la boucle FOR LOOP.




    Cdlt!

  7. #7
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Solution avec le select
    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
    DECLARE
    	v_numd number :=20194001;
    	v NUMBER;
    BEGIN
      LOOP
        BEGIN
           SELECT 1 INTO v
          FROM entete_dm
          WHERE numero_d=v_numd
          -- On a trouvé, on continue
    	v_numd := v_numd + 1;  
     
         EXCEPTION WHEN NO_DATA_FOUND THEN  -- Pas trouvé, on affecte et on sort
        	  :num_d := v_numd;
            EXIT;  
        END;
      END LOOP;
    END;
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  8. #8
    Invité
    Invité(e)
    Par défaut
    Merci McM,ça aussi sa marche et c'est même moins encombrant.











    cdlt!

Discussions similaires

  1. Initialiser deux séquences par le même numéro
    Par SALMHSN dans le forum PL/SQL
    Réponses: 0
    Dernier message: 31/03/2011, 12h43
  2. Réponses: 4
    Dernier message: 06/07/2010, 15h18
  3. [Débutant] Lire deux séquences vidéos au même temps
    Par miss_angel dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 14/05/2009, 17h27
  4. Réponses: 4
    Dernier message: 02/10/2008, 16h48
  5. Connaitre le numéro attribué a un numéro auto
    Par Doo dans le forum VBA Access
    Réponses: 2
    Dernier message: 28/04/2007, 10h49

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