Saltar al contenido

¿Cómo recuperar el valor actual de una secuencia de Oracle sin incrementarlo?

Solución:

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

Puede obtener una variedad de metadatos de secuencia de user_sequences, all_sequences y dba_sequences.

Estas vistas funcionan en todas las sesiones.

EDITAR:

Si la secuencia está en su esquema predeterminado, entonces:

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

Si quieres todos los metadatos, entonces:

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

Espero eso ayude…

EDIT2:

Una forma larga de hacerlo de manera más confiable si el tamaño de su caché no es 1 sería:

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.

Solo tenga en cuenta que si otros están usando la secuencia durante este tiempo, ellos (o usted) pueden obtener

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

Además, es posible que desee configurar la caché en NOCACHE antes del restablecimiento y luego vuelva a su valor original para asegurarse de que no haya almacenado en caché muchos valores.

select MY_SEQ_NAME.currval from DUAL;

Tenga en cuenta que solo funciona si ejecutó select MY_SEQ_NAME.nextval from DUAL; en las sesiones actuales.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *