SELECT last_number
FROM all_sequences
WHERE sequence_owner = '<sequence owner>'
AND sequence_name = '<sequence_name>';
Możesz uzyskać różne metadane sekwencji z user_sequences
, all_sequences
i dba_sequences
.
Te widoki działają w wielu sesjach.
EDYTUJ:
Jeśli sekwencja znajduje się w domyślnym schemacie, to:
SELECT last_number
FROM user_sequences
WHERE sequence_name = '<sequence_name>';
Jeśli chcesz wszystkie metadane, to:
SELECT *
FROM user_sequences
WHERE sequence_name = '<sequence_name>';
Mam nadzieję, że to pomoże...
EDIT2:
Długim sposobem na zrobienie tego bardziej niezawodnie, jeśli rozmiar pamięci podręcznej nie jest równy 1, to:
SELECT increment_by I
FROM user_sequences
WHERE sequence_name = 'SEQ';
I
-------
1
SELECT seq.nextval S
FROM dual;
S
-------
1234
-- Set the sequence to decrement by
-- the same as its original increment
ALTER SEQUENCE seq
INCREMENT BY -1;
Sequence altered.
SELECT seq.nextval S
FROM dual;
S
-------
1233
-- Reset the sequence to its original increment
ALTER SEQUENCE seq
INCREMENT BY 1;
Sequence altered.
Tylko uważaj, jeśli inni używają sekwencji w tym czasie - oni (lub Ty) mogą dostać
ORA-08004: sequence SEQ.NEXTVAL goes below the sequences MINVALUE and cannot be instantiated
Możesz także ustawić pamięć podręczną na NOCACHE
przed zresetowaniem, a następnie z powrotem do pierwotnej wartości, aby upewnić się, że nie zbuforowałeś wielu wartości.