sql >> Database >  >> RDS >> Oracle

Hoe de huidige waarde van een orakelreeks op te halen zonder deze te verhogen?

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

U kunt een verscheidenheid aan sequentiemetadata krijgen van user_sequences , all_sequences en dba_sequences .

Deze weergaven werken in verschillende sessies.

BEWERKEN:

Als de reeks in uw standaardschema staat, dan:

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

Als je alle metadata wilt, dan:

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

Ik hoop dat het helpt...

EDIT2:

Een omslachtige manier om het betrouwbaarder te doen als uw cachegrootte niet 1 is, zou zijn:

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.

Pas op dat als anderen de reeks gedurende deze tijd gebruiken, zij (of jij)

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

U kunt ook de cache instellen op NOCACHE voorafgaand aan het resetten en daarna terug naar de oorspronkelijke waarde om er zeker van te zijn dat je niet veel waarden in de cache hebt opgeslagen.



  1. Ontsnappen aan wildcards in LIKE

  2. Hoe de volledige MySQL-database te verwijderen

  3. Hoe kan ik de standaardwaarde van een tijdstempelkolom instellen op de huidige tijdstempel met Laravel-migraties?

  4. Onmiddellijke bestandsinitialisatie:impact tijdens installatie