Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie kann ich den aktuellen Wert einer Orakelsequenz abrufen, ohne ihn zu erhöhen?

SELECT last_number
  FROM all_sequences
 WHERE sequence_owner = '<sequence owner>'
   AND sequence_name = '<sequence_name>';

Sie können eine Vielzahl von Sequenzmetadaten von user_sequences erhalten , all_sequences und dba_sequences .

Diese Ansichten funktionieren sitzungsübergreifend.

BEARBEITEN:

Wenn sich die Sequenz in Ihrem Standardschema befindet, dann:

SELECT last_number
  FROM user_sequences
 WHERE sequence_name = '<sequence_name>';

Wenn Sie alle Metadaten wollen, dann:

SELECT *
  FROM user_sequences
 WHERE sequence_name = '<sequence_name>';

Hoffe es hilft...

EDIT2:

Ein langwieriger Weg, es zuverlässiger zu machen, wenn Ihre Cache-Größe nicht 1 ist, wäre:

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.

Beachten Sie jedoch, dass, wenn andere die Sequenz während dieser Zeit verwenden, sie (oder Sie) möglicherweise

erhalten
ORA-08004: sequence SEQ.NEXTVAL goes below the sequences MINVALUE and cannot be instantiated

Außerdem sollten Sie den Cache auf NOCACHE setzen vor dem Zurücksetzen und danach wieder auf den ursprünglichen Wert, um sicherzustellen, dass Sie nicht viele Werte zwischengespeichert haben.