Announcement

Collapse
No announcement yet.

Sequenz zurücksetzen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Sequenz zurücksetzen

    Hallo Folks,

    weiß jemand wie man eine Sequenz zurücksetzt?

    Ich meine dass die Sequenz nach einer Ladenstrecke wieder bei 0 bzw. 1 startet.

    Ich will die Sequenz aber nicht erstmal löschen und wieder create.


    1000 Dank

    vinzi

  • #2
    Originally posted by vinzsanity View Post
    ...Ich will die Sequenz aber nicht erstmal löschen und wieder create....
    Das ist aber der einzige Weg, wenn du eine Sequenz "zurücksetzen" willst.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Du kanns angeben, ab welchem Wert die Sequence wieder von vorne beginnen soll:
      Code:
      create sequence seq_test maxvalue 5 cycle cache 2;
      Beachte, dass cache kleiner sein muss als der amximale Wert. Default ist 20 daher hab ich den cache Wert hier noch explizit angegeben.
      Code:
      select seq_test.nextval from all_objects where rownum <=15;
      NEXTVAL                
      ---------------------- 
      1                      
      2                      
      3                      
      4                      
      5                      
      1                      
      2                      
      3                      
      4                      
      5                      
      1                      
      2                      
      3                      
      4                      
      5                      
      
      15 rows selected
      Ansonsten gibt es, wie Falk schon gesagt hat, nur die Möglichkeit sie zu löschen und neu anzulegen.

      Dim
      Zitat Tom Kyte:
      I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

      Comment


      • #4
        Ohne DROP geht es auch, mit einem Trick:
        1. setze den Wert von INCREMENT auf negativen CURRVAL (iSeq)
        2. hole NEXTVAL -> CURRVAL ist 0
        3. setze den Wert von INCREMENT 1
        4. hole NEXTVAL->CURRVAL ist 1
        Hier ein dynamisches Beispiel, geht natürlich auch direkt...
        Code:
        EXECUTE IMMEDIATE 'ALTER SEQUENCE '||tSeqName||' MINVALUE -10E18 MAXVALUE 10E18 NOCYCLE NOCACHE INCREMENT BY '||-iSeq;
        EXECUTE IMMEDIATE 'SELECT         '||tSeqName||'.NEXTVAL FROM DUAL ' INTO iTest;
        EXECUTE IMMEDIATE 'ALTER SEQUENCE '||tSeqName||' INCREMENT BY 1';
        EXECUTE IMMEDIATE 'SELECT         '||tSeqName||'.NEXTVAL FROM DUAL' INTO iTest;
        Zuletzt editiert von jum; 02.10.2008, 08:11.

        Comment


        • #5
          Damit stehen dann 2 ALTER + 2 SELECT gegen 1 DROP + 1 CREATE .
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            @Falk, klar Du hast Recht, wir setzen das nur ein, wenn die Sequenzen in Packages verwendet werden. Falls Du solche Sequenzen löscht und wieder neu erzeugst, wird der Status des Packages INVALID und es muss neu cmpiliert werden, mit dem Trick kann man das vermeiden.

            Comment

            Working...
            X