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 :

Oracle : Modifier la valeur courante d'une séquence


Sujet :

Oracle

  1. #1
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 53
    Points : 47
    Points
    47
    Par défaut Oracle : Modifier la valeur courante d'une séquence
    Bonjour,

    J'ai créé une séquence Oracle de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE SEQUENCE SQ_MAIL INCREMENT BY 1 START 
        WITH 1 MAXVALUE 1.0E28 MINVALUE 1 NOCYCLE 
        CACHE 20 NOORDER;
    Cette séquence est incrémentée à chaque INSERT dans une table donnée.

    Mail après plusieurs insertions, puis suppressions, j'ai remarqué la présence de trous. ça saute de 10 à 41....

    Je souhaiterais faire un ALTER SEQUENCE SQ_MAIL ..... ou autre
    de sorte que pour un nouvel INSERT ma séquence retoune 11, puis 12, puis 13, ...

    Quelqu'un pourrait-il m'aider?

    Merci

  2. #2
    Membre actif
    Inscrit en
    Novembre 2004
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 312
    Points : 202
    Points
    202
    Par défaut
    DROP ta séquence, puis recrée la en la faisant repartir de 11 par exemple



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    DROP SEQUENCE SQ_MAIL
    /
     
    CREATE SEQUENCE SQ_MAIL INCREMENT BY 1 START 
        WITH 11 MAXVALUE 1.0E28 MINVALUE 1 NOCYCLE 
        CACHE 20 NOORDER
    /

  3. #3
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 53
    Points : 47
    Points
    47
    Par défaut
    en supprimant la séquence, cela n'aura-t-il pas d'impact négatif sur les enrégistrements déjà réalisés? Et puis, cette séquence est utilisée par le trigger suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TRIGGER TG_MAIL BEFORE
    INSERT ON MAIL FOR EACH ROW begin
    SELECT SQ_MAIL.nextval into :new.IDMAIL from dual;
    end;
    Puis-je supprimer la séquence SQ_MAIL malgré ce lien avec le trigger TG_MAIL ?

    Enfin, ne vais-je pas perdre mes 10 premiers enregistrements de la table MAIL?

    Merci

  4. #4
    Membre actif
    Inscrit en
    Novembre 2004
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 312
    Points : 202
    Points
    202
    Par défaut
    Oui ! tu peux le faire !!
    Ton trigger sera peut être juste INVALID.

    Tu ne perdras pas de données dans ta table !

  5. #5
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Points : 8 079
    Points
    8 079
    Par défaut
    Citation Envoyé par davy.g
    DROP ta séquence, puis recrée la en la faisant repartir de 11 par exemple
    Non non, mauvaise idée !
    Une séquence n'est pas faite pour fournir des valeurs sans trous, donc inutile de bricoler de la sorte.

  6. #6
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par Pomalaix
    Non non, mauvaise idée !
    Une séquence n'est pas faite pour fournir des valeurs sans trous, donc inutile de bricoler de la sorte.
    bonne réponse

  7. #7
    Membre actif
    Inscrit en
    Novembre 2004
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 312
    Points : 202
    Points
    202
    Par défaut
    Oui, je suis d'accord mais parfois on ne peut pas faire autrement !!!

    C'est quand même possible même si c'est pas fait pour !
    Si c'est juste pour repartir du bon pieds une première fois après avoir fait des tests , je pense qu'il peut le faire ! Maintenant, s'il s'étonne d'avoir des trous après des INSERT et DELETE, c'est normal avec une séquence !
    Maintenant, c'est à lui de voir !

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 13
    Points : 13
    Points
    13
    Par défaut
    Effectivement, il faut éviter de faire un drop/create de ta séquence surtout si tu renseignes une colonne avec une contrainte unique tu vas avoir des plantages lorsque tu vas arriver sur une valeur déjà renseignée.
    Mais tu peux modifier ta séquence en lui mettant "NOCACHE" à la place de "CACHE 20" pour limiter les trous.

    A+

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/03/2013, 08h37
  2. Java + Ibatis + Oracle -> récupérer la valeur courante de la séquence
    Par nico1214 dans le forum Persistance des données
    Réponses: 1
    Dernier message: 01/12/2011, 16h13
  3. Valeur courante d'une séquence
    Par lido dans le forum Forms
    Réponses: 2
    Dernier message: 07/07/2008, 10h00
  4. Valeur courante d'une séquence
    Par tchoimars dans le forum SQL
    Réponses: 6
    Dernier message: 07/04/2008, 14h05
  5. Selectionner la valeur courante d'une liste
    Par genova dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 03/01/2006, 20h46

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