ver valor todas secuencias secuencia obtener las ejemplos developer crear como asignar alfanumerica sql oracle

sql - todas - ¿Cómo recuperar el valor actual de una secuencia de oráculo sin incrementarlo?



secuencias pl sql (3)

¿Hay una instrucción SQL para recuperar el valor de una secuencia que no lo incrementa?

Gracias.

EDITAR Y CONCLUSIÓN

Como dice Justin Cave No es útil intentar "guardar" el número de secuencia para

select a_seq.nextval from dual;

es lo suficientemente bueno para verificar un valor de secuencia.

Sigo manteniendo la respuesta de Ollie como la buena porque respondió la pregunta inicial. pero pregúntate sobre la necesidad de no modificar la secuencia si alguna vez quieres hacerlo.


Mi respuesta original fue objetivamente incorrecta y me alegro de que haya sido eliminada. El siguiente código funcionará bajo las siguientes condiciones a) usted sabe que nadie más modificó la secuencia b) la secuencia fue modificada por su sesión. En mi caso, me encontré con un problema similar cuando estaba llamando a un procedimiento que modificó un valor y estoy seguro de que la suposición es cierta.

SELECT mysequence.CURRVAL INTO v_myvariable FROM DUAL;

Tristemente, si no modificó la secuencia en su sesión, creo que otros están en lo cierto al afirmar que NEXTVAL es la única manera de hacerlo.


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


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 manera larga de hacerlo de manera más confiable si su tamaño de 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 usan 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 establecer el caché en NOCACHE antes del restablecimiento y luego volver a su valor original después para asegurarse de que no ha almacenado en caché una gran cantidad de valores.