14 de julio de 2009

Reiniciar una secuencia de Oracle

Hoy en el trabajo he tenido que reiniciar una secuencia que estaba dentro de un trigger (disparador) a un determinado valor (porque había fallado varias veces y necesitaba ponerla en el último valor correcto conocido), y bueno, yo la verdad es que no dejo de ser un programador junior y cada cosa que resuelvo para mi es una victoria que puede olvidarse con el tiempo, es por ello, que voy a poner aqui las 4 lineas que he realizado para que si en el futuro alguien lo busca en internet, tenga un fuente mas de san Google :)

He aquí 2 maneras de hacerlo, la chapucera y la apañada:

Chapucera: Modifico la secuencia haciendo que ahora se incremente en la cantidad negativa que me hace falta para llegar al último valor bueno conocido, despues incremento uno para "ejecutar" y despues la vuelvo a modificar para ponerlo normal.

alter sequence TABLA_SEQ increment by -260;

SELECT TABLA_SEQ.NEXTVAL from dual;

alter sequence TABLA_SEQ increment by 1;

Apañada: Paro el trigger, borro la secuencia, la creo de cero exactamente igual pero poniendola que empiece en el valor que necesito OJO, ese va a ser el primer valor que dé el nextVal, vuelvo a habilitar el trigger, y ya lo tenemos. No digo que sea la mejor pero si que apañada :)

alter TRIGGER TRIGGER disable;

DROP SEQUENCE TABLA_SEQ;

CREATE SEQUENCE TABLA_SEQ

START WITH 80

MAXVALUE 999

MINVALUE 1

NOCYCLE

CACHE 20

NOORDER;

alter TRIGGER TRIGGER enable;

Fuente: http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=178

No hay comentarios:

Publicar un comentario