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 :

Mettre à zéro une séquence


Sujet :

Oracle

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 759
    Points : 208
    Points
    208
    Par défaut Mettre à zéro une séquence
    bonjour à tous,
    Voilà je crée une table TST1 en créant une séquence avec ce trigger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    create or replace
    TRIGGER trg_TST1
    BEFORE INSERT
    ON TST1
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROW
    BEGIN
    SELECT SEQ_TSTT.nextval
    INTO :NEW.IND
    FROM DUAL;
    END;
    mais le problème est que la séquence s'incrémente tout le temps comment faire pour que la valeur de SEQ_TSTT soit égal à 1 tout le temps au départ et ensuite s'incrémente?
    Si quelqu'un peut m'aider merçi

  2. #2
    Membre du Club
    Homme Profil pro
    ingénieur d'étude PL/SQL
    Inscrit en
    Octobre 2002
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur d'étude PL/SQL

    Informations forums :
    Inscription : Octobre 2002
    Messages : 53
    Points : 69
    Points
    69
    Par défaut
    quand tu dis "valeur de SEQ_TSTT soit égal à 1" mais quand à la creation de la base , suite au vidage de la table ?
    le seul moyen de reinitialiser une sequence c'est de la detruire et de la recreer

  3. #3
    Membre éprouvé Avatar de 13thFloor
    Homme Profil pro
    DBA Oracle freelance
    Inscrit en
    Janvier 2005
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle freelance

    Informations forums :
    Inscription : Janvier 2005
    Messages : 670
    Points : 945
    Points
    945
    Par défaut
    Non,il peut la réinitialiser en modifiant le pas à -n (n=currval), faisant un select nextval puis modification du pas à +1.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 759
    Points : 208
    Points
    208
    Par défaut réponse à 13thFloor
    Merci pour votre aide mais pourriez-vous être un peu plus précis car je ne vois pas trop comment faire pour mettre en place ce que vous préconisez.
    Merci

  5. #5
    Membre éprouvé Avatar de 13thFloor
    Homme Profil pro
    DBA Oracle freelance
    Inscrit en
    Janvier 2005
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle freelance

    Informations forums :
    Inscription : Janvier 2005
    Messages : 670
    Points : 945
    Points
    945
    Par défaut
    Voici un exemple :

    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
    CREATE SEQUENCE SEQTEST MINVALUE 1 MAXVALUE 999999 INCREMENT BY 1 start with 1 nocache NOORDER  NOCYCLE;
     
    SQL> select seqtest.currval from dual;
       CURRVAL
    ----------
             6
     
    SQL> alter sequence seqtest INCREMENT BY -5;
    Sequence altered.
     
    SQL> select seqtest.nextval from dual;
       NEXTVAL
    ----------
             1
     
    SQL> alter sequence seqtest INCREMENT BY 1;
    Sequence altered.
     
    SQL> select seqtest.nextval from dual;
       NEXTVAL
    ----------
             2

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 759
    Points : 208
    Points
    208
    Par défaut réponse à 13thFloor
    Merci pour votre aide.
    Effectivement ça fonctionne mais le problème est que je démarre mes index à 2 et pas à 1 : le code de la séquence devient ainsi après tous les "ALTER sequence" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE SEQUENCE   "SEQ_TSTT"  MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 2 NOCACHE  ORDER  NOCYCLE ;
    Existe-t-il une solution pour modifier la valeur du démarrage ?
    Merci encore

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 759
    Points : 208
    Points
    208
    Par défaut réponse à moi même
    En fouillant sur le net j'ai trouvé la solution; voici ce qu'il faut faire, ça pourra servir à quelqu'un :
    1) créer une séquence avec et c'est là la solution un min value = 0 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create sequence seq start vith 1 minvalue 0;
    2)lister le currval :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select seq.currval from dual;
    içi il vaut 28
    3)
    modifier la séquence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter sequence seq increment by -28;
    4) lister le nextval :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select nextval from dual;
    5) remodifier la séquence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter sequence seq increment by 1;
    Et là la séquence démarre bien à zéro

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 759
    Points : 208
    Points
    208
    Par défaut erreur sur mon précédent post
    Citation Envoyé par xeron33 Voir le message
    Et là la séquence démarre bien à zéro


    Non bien sur pas à ZERO mais à 1

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

Discussions similaires

  1. Mettre à jour une séquence
    Par miss_angel dans le forum OpenCV
    Réponses: 0
    Dernier message: 14/07/2011, 14h07
  2. mettre à disposition une séquence vidéo
    Par marcel marie dans le forum Vidéo
    Réponses: 3
    Dernier message: 31/12/2009, 11h45
  3. Passer une séquence en parametre
    Par djousss dans le forum CORBA
    Réponses: 2
    Dernier message: 02/12/2003, 22h39
  4. Extraire une séquence d'un fichier MPEG
    Par enzosp dans le forum DirectX
    Réponses: 2
    Dernier message: 24/02/2003, 11h30

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