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

Oracle Discussion :

passage du compteur en séquence oracle


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Points : 23
    Points
    23
    Par défaut passage du compteur en séquence oracle
    Bonjour,

    On m'avait demandé de changer un compteur en séquence oracle (développement en C), je suis stagiaire chez un editeur de logiciel.ma question c'est que: quels sont les avantages de ce passage? j'ai du le voir rapidement et du coup je l'ai pas vraiment compris pourquoi.



    Est ce que vous pourriez m'aider s'il vous plait?
    merci

    Hariri

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    c'est intégré (donc pas de dév particulier) et tu n'as pas de risque de doublons

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Points : 23
    Points
    23
    Par défaut
    Merci de m'avoir répondu,
    Si j'ai bien compris, l'incrémentation automatique est intégré dans la séquence oracle?c'est ça?
    ça veut dire que l'avantage de son utilisation c'est pour éviter les doublons? c'est juste une confirmation pour que je raconte pas n'importe koi dans mon rapport,tu vois

    Merci

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    l'incrémentation de la séquence se fait quand on sélectionne la valeur suivante. En revanche, il n'y a pas de colonne de type autoincrément si c'est la question
    la FAQ répond à cette problématique : http://oracle.developpez.com/faq/?pa...#autoincrement

    A moins de réinitialiser la séquence tu évites les doublons en effet

  5. #5
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Juste une remarque : attention tu peux avoir des trous dans la numérotation
    => si tu dois avoir des nombres qui se suivent (comme la gestion des numéros de pièces comptables par exemple), la séquence n'est pas la bonne solution
    => par contre si ton but est d'avoir un identifiant unique généré automatiquement, là pas de soucis (à condition de pas réinitialiser ta séquence ni de la faire "boucler")
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  6. #6
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    en NOCACHE tu ne peux avoir des trous que si quelqu'un sélectionne la commande en dehors du process prévu

  7. #7
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Exact, en théorie, parce qu'en pratique je maintiens ce que je dis, pour gérer une numérotation sans trou, je déconseille les séquences (un select maseq.nextval from dual est vite arrivé, de même qu'un rollback)
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  8. #8
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    donc si quelqu'un fait un SELECT en dehors du process comme je le disais

  9. #9
    j6m
    j6m est déconnecté
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 87
    Points : 84
    Points
    84
    Par défaut process concept
    je trouve cette idée intéressante, mais c'est quoi un process pour toi? On ne peut agir sur cette séquence que si on l'appelle depuis une procédure précise?
    Comment tu fais ça? Je ne vois pas bien comment ça se passe au niveau des privilèges.
    quand la pierre tombe sur l’œuf, malheur à l’œuf
    quand l’œuf tombe sur la pierre, malheur à l’œuf

  10. #10
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Pour utiliser une séquence, il suffit d'avoit le droit de faire un SELECT dessus comme pour une table. Je ne comprends pas ce que veut dire Fred_D mais je suis d'accord avec PlaineR, Oracle ne garantit pas qu'il n'y a pas de trou dans une séquence même avec l'option NOCACHE: comment peut-on être sûr qu'une transaction ne se termine pas par un ROLLBACK ?

    D'après: http://download-uk.oracle.com/docs/c...views.htm#3569

    Oracle might skip sequence numbers if you choose to cache a set of sequence numbers. For example, when an instance abnormally shuts down (for example, when an instance failure occurs or a SHUTDOWN ABORT statement is issued), sequence numbers that have been cached but not used are lost. Also, sequence numbers that have been used but not saved are lost as well. Oracle might also skip cached sequence numbers after an export and import.

  11. #11
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Points : 23
    Points
    23
    Par défaut
    Bonjour,

    Merci pour vous tous de m'avoir donner des explications,

    Citation Envoyé par plaineR
    Juste une remarque : attention tu peux avoir des trous dans la numérotation
    => si tu dois avoir des nombres qui se suivent (comme la gestion des numéros de pièces comptables par exemple), la séquence n'est pas la bonne solution
    => par contre si ton but est d'avoir un identifiant unique généré automatiquement, là pas de soucis (à condition de pas réinitialiser ta séquence ni de la faire "boucler")
    Oui, mon but c'est d'avoir un identifiant unique généré automatiquement, mais je n'ai pas bien compris ce que vous parlez là à propos de 'trous', la séquence commence à partir du dernier numéro existait c'est ça? excusez-moi j'suis débutante mais j'essaye de m'accrocher pour bien comprendre ce que vous dites,j'en aurais surement besoin pour répondre aux questions que les membres de jury vont me poser pendant l'oral.

    Je reformule, si on commence par exemple par l'identifiant n°100, on continue la saisie jusqu'à 105 par exemple(on fait la saisie d'une facture par exemple), et si jamais on se trompe de quelques chifrres pour ce client n°105 et du coup on doit annuler la saisie, le nouveau num de ce même client ce sera le n°106 n'est ce pas? ou je me trompe?

    Une autre question, si jamais deux client saisissent en même temps leurs factures, est ce qu'il est possible qu'ils auront tous les deux un même num d'identification? c'est bête comme question mais je voudrais être bienrassurée, s'ils font commit en même temps,comment ça va se passer?

    Dernière question, c'est à quel moment qu'il peut y avoir des trous dans la séquence? parce que si on utilise "select maseq.nextval from dual ", il doit toujours afficher le prochain num c'est ça? je me trompe peut être mais je voudrais s'il vous plait que vous m'éclaircir beaucoup plus sur ce point là.

    Merci d'avance

  12. #12
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Les trous c'est par exemple si un client génére une facture, qu'il obtient le numéro 106, puis qu'il l'annule et qu'il en génère une autre, cette nouvelle facture ne portera pas le numéro 106 mais le numéro 107 et ptet même le numéro 110 par exemple.

    Et quand tu regarderas tes factures tu auras des trous dans la numérotation. Par exemple imaginons que tu as 3 factures de validées, elles porteront les numéros :
    1
    2
    25

    Parce qu'entre la 1ere et la 2e il n'y a eu aucun problème, mais entre la 2 et la 25 le client s'y est repris à 23 fois pour arriver à la générer. Donc selon la vision de ton système, on risque de te dire "Mais mais mais, qu'est-il arrivé aux factures entre la 2e et la 25e ???". D'un point de vue technique ce n'est pas choquant d'avoir des trous dans la numérotation mais d'un point de vue fonctionnel, ça peut choquer tes utilisateurs (et tes profs).

    Enfin ça se défend de toutes façons. Et pour ton autre question il est IMPOSSIBLE que 2 factures obtiennent le même numéro (et en plus j'espère que tu as une contrainte unique dessus).
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  13. #13
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Points : 23
    Points
    23
    Par défaut [résolu]
    Je te remercie beaucoup nuke_y, j'ai compris maintenant

    Je crois que tout ce que j'ai appris par vous me servira, j'ai les réponses à mes
    questions maintenant


    Encore merci pour vous tous

    hariri

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/12/2007, 16h19
  2. le passage de l'exel vers oracle 9i
    Par youness_ka dans le forum Toad
    Réponses: 3
    Dernier message: 25/10/2007, 18h25
  3. Accès à une séquence oracle
    Par coco21 dans le forum JDBC
    Réponses: 2
    Dernier message: 10/05/2007, 12h07
  4. Gestion d'une séquence oracle
    Par mikky dans le forum Hibernate
    Réponses: 2
    Dernier message: 18/01/2007, 11h15
  5. Réponses: 7
    Dernier message: 16/10/2006, 18h40

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