Regresando una secuencia a un valor

Muchas veces, nos topamos con el problema de necesitar reasignar un valor a una secuencia o reiniciarla en su valor original cuando se creó. Para esto, he visto que mucha gente lo que hace, es darle un drop a la secuencia y volverla a crear. Esto aunque válido, no se me hace la forma más elegante o mejor de hacerlo. Aquí muestro el cómo hacerlo sin tener que dar un drop a la secuencia.

Entonces veamos el ejemplo de lo que muestro arriba. Para esto, damos por sentado que tenemos una secuencia creada de manera normal con su incremento normal:

SQL> create sequence sec_prueba
  2  start with 1
  3  increment by 1;

Secuencia creada.

De aquí, lo que se hace, es darle un “uso normal” a la misma, seleccionando su nextval varias veces:

SQL> select sec_prueba.nextval from dual;

   NEXTVAL
----------
         1

SQL> select sec_prueba.nextval from dual;

   NEXTVAL
----------
         2

SQL> select sec_prueba.nextval from dual;

   NEXTVAL
----------
         3

SQL> select sec_prueba.nextval from dual;

   NEXTVAL
----------
         4

SQL> select sec_prueba.nextval from dual;

   NEXTVAL
----------
         5

SQL> select sec_prueba.nextval from dual;

   NEXTVAL
----------
         6

SQL> select sec_prueba.nextval from dual;

   NEXTVAL
----------
         7

SQL> select sec_prueba.nextval from dual;

   NEXTVAL
----------
         8

SQL> select sec_prueba.nextval from dual;

   NEXTVAL
----------
         9

SQL> select sec_prueba.nextval from dual;

   NEXTVAL
----------
        10

Aquí, es cuando por un error o por necesidad, necesitamos hacer que la secuencia vuelva a comenzar en su valor original, o en algún valor predeterminado. Para dar forma al ejemplo, supongamos que tenemos que recomenzar en 5 porque se cometió un error en un proceso. Lo que tenemos que hacer, es alterar la secuencia para que tenga un incremento negativo por 5.

SQL> alter sequence sec_prueba increment by -5;

Secuencia modificada.

Y ya con la secuencia alterada, se selecciona el nextval para que la misma, tome el nuevo incremento:

SQL> select sec_prueba.nextval from dual;

   NEXTVAL
----------
         5

No hay que olvidar volver a alterar el incremento al original, porque si no se hace, el siguiente incremento será por el mismo valor negativo que se asignó, generando otro problema.

SQL> alter sequence sec_prueba increment by 1;

Secuencia modificada.

SQL> select sec_prueba.nextval from dual;

   NEXTVAL
----------
         6

Si la información de este post te ha sido de utilidad o quieres que agregue algo más, deja por favor un comentario, contestaré a la brevedad.

Anuncios

2 Responses to Regresando una secuencia a un valor

  1. DayverDDT says:

    Mucho tiempo despues… Excelente la nota

  2. orlandoolguin says:

    Qué bueno que te haya servido DayverDDT.

    Orlando.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: