sql >> Database teknologi >  >> RDS >> Oracle

Hvordan henter man den aktuelle værdi af en orakelsekvens uden at øge den?

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

Du kan få en række forskellige sekvensmetadata fra user_sequences , all_sequences og dba_sequences .

Disse synspunkter fungerer på tværs af sessioner.

EDIT:

Hvis sekvensen er i dit standardskema, så:

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

Hvis du vil have alle metadata, så:

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

Håber det hjælper...

EDIT2:

En langvarig måde at gøre det mere pålideligt på, hvis din cachestørrelse ikke er 1, ville væ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.

Bare pas på, at hvis andre bruger sekvensen i løbet af denne tid - kan de (eller du) få

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

Du vil måske også indstille cachen til NOCACHE før nulstillingen og derefter tilbage til dens oprindelige værdi bagefter for at sikre, at du ikke har cachelagret mange værdier.



  1. Find det sidste indeks af en streng i Oracle

  2. VBA Alchemy:At gøre metoder til egenskaber

  3. Hvorfor kan PL/pgSQL-funktioner have bivirkning, mens SQL-funktioner ikke kan?

  4. ADO.net SqlTransaction forbedrer ydeevnen