Aktueller Wert einer Sequence

Hallo zusammen,

Mit „SELECT PK_DO_VISP_SEQ.NEXTVAL FROM DUAL“ hole ich mir eine neue Sequence Nummer.

Nun möchte ich wissen, wie hoch der letzte Stand war.
Wie bekomme ich das raus?

Z.B.
SELECT PK_DO_VISP_SEQ.LASTVAL FROM DUAL oder so änlich…

Vielen Dank.
Gruss, Simon

Hi,

SELECT PK_DO_VISP_SEQ.LASTVAL FROM DUAL oder so änlich…

So ähnlich: SELECT PK_DO_VISP_SEQ.CURRVAL FROM DUAL

Achtung: CURRVAL ist innerhalb einer Session nur nach einem vorherigen NEXTVAL definiert; ansonsten gibt es eine Fehlermeldung:

C:\Dokumente und Einstellungen\Sancho\>sqlplus sancho@lokal
SQL\*Plus: Release 9.2.0.1.0 - Production on Mo Okt 11 12:58:26 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Verbunden mit:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
SQL\> select test\_seq.currval from dual;
select test\_seq.currval from dual
 \*
FEHLER in Zeile 1:
ORA-08002: Sequenz TEST\_SEQ.CURRVAL ist in dieser Session noch nicht definiert

SQL\> select test\_seq.nextval from dual;

 NEXTVAL
----------
 4711

SQL\> select test\_seq.currval from dual;

 CURRVAL
----------
 4711

Gruß

Sancho

Hallo Sancho,

Ja von currval habe ich schon was gehört.
Das bringt mich aber leider nicht weiter, weil der nur in der Session gültig ist.

Ich habe folgenden Fall.

Datensätze in einer Tabelle werden mit einer Sequence-Nummer markiert.
Es könnte nun sein, dass ich dies rückgängig machen möchte.
D.h. ich möcht später (nicht mehr in der gleichen Session) die Sequence abfragen und alle mit dieser Nummer markierten Datensätze mutieren.

Wie kann ich das lösen?

Danke und Gruss
Simon

Hallo Simon!

Ja von currval habe ich schon was gehört.
Das bringt mich aber leider nicht weiter, weil der nur in der
Session gültig ist.

Vielleicht hilft dir das hier weiter:

SELECT last\_number FROM user\_sequences WHERE sequence\_name='MY\_SEQUENCE';

Es könnte nun sein, dass ich dies rückgängig machen möchte.
D.h. ich möcht später (nicht mehr in der gleichen Session) die
Sequence abfragen und alle mit dieser Nummer markierten
Datensätze mutieren.

Damit kriegst du aber definitiv ein Problem, wenn dazwischen schon ein neuer Wert aus der Sequence geholt wurde. Falls du das umgehen kannst… (dabei aber immer schön Murphy’s Law im Kopf behalten, gelle :wink:)

Liebe Grüße
Martin

Hallo Martin,

Vielleicht hilft dir das hier weiter:

SELECT last_number
FROM user_sequences WHERE sequence_name=‚MY_SEQUENCE‘;

Toll das hat geholfen.

Damit kriegst du aber definitiv ein Problem, wenn dazwischen
schon ein neuer Wert aus der Sequence geholt wurde. Falls du
das umgehen kannst… (dabei aber immer schön Murphy’s Law im
Kopf behalten, gelle :wink:)

Das habe ich im Griff!
Diese Sequence wird in einer Batch-Verarbeitung gebraucht und das lesen und zurücksetzen ist Teil des Recovery-Prozesses.

Vielen Dank.
Simon