borrame.com - Colección particular de recortes de código y documentación para programación web

Canales RSS

Lo más fresco

  1. Reemplazar selección con JavaScript Nuevo
  2. ¿Esta IP pertenece a esta red? Modificado
  3. Mozilla Firefox Modificado

Sugerencias del chef

Lo más visitado

  1. Dar formato a un número
  2. Fecha y hora
  3. Campo autonumérico
  4. Rotar logs en Windows
  5. Reiniciar Apache con cuidado (graceful restart)
Compartir esta página

Reiniciar secuencia

Este procedimiento que he robado por ahí permite establecer el próximo número de una secuencia al valor que se desee. Es práctico si queremos limpiar una tabla tras haber estado cacharreando y es imprescindible si hemos insertamos valores con el ID fijado a mano.

CREATE OR REPLACE PROCEDURE RESET_SEQUENCE (
    SEQ_NAME IN VARCHAR2,
    STARTVALUE IN PLS_INTEGER
)
AS
    CVAL INTEGER;
    INC_BY VARCHAR2(25);
BEGIN
    /*
     * Procedimiento para resetear una secuencia
     *
     * http://www.psoug.org/reference/sequences.html
     */

    EXECUTE IMMEDIATE 'ALTER SEQUENCE ' || SEQ_NAME || ' MINVALUE 0';

    EXECUTE IMMEDIATE 'SELECT ' || SEQ_NAME || '.NEXTVAL FROM DUAL'
    INTO CVAL;

    CVAL := CVAL - STARTVALUE + 1;
    IF CVAL < 0 THEN
        INC_BY := ' INCREMENT BY ';
        CVAL:= ABS(CVAL);
    ELSE
        INC_BY := ' INCREMENT BY -';
    END IF;

    EXECUTE IMMEDIATE 'ALTER SEQUENCE ' || SEQ_NAME || INC_BY || CVAL;

    EXECUTE IMMEDIATE 'SELECT ' ||SEQ_NAME || '.NEXTVAL FROM DUAL'
    INTO CVAL;

    EXECUTE IMMEDIATE 'ALTER SEQUENCE ' || SEQ_NAME || ' INCREMENT BY 1';

END RESET_SEQUENCE;
/

Ejemplos de uso

-- Limpiar los pedidos de prueba
DELETE FROM PEDIDO;
EXECUTE RESET_SEQUENCE('PEDIDO_ID_SEQ', 1);

-- Crear los roles predeterminados
INSERT INTO ROL (ROL_ID, NOMBRE_ROL) VALUES (1, 'admin');
INSERT INTO ROL (ROL_ID, NOMBRE_ROL) VALUES (2, 'editor');
EXECUTE RESET_SEQUENCE('ROL_ID_SEQ', 3);

Esta página ha sido impresa el miércoles 22 de febrero de 2012 (19:20:58 +0100) desde http://borrame.com/recortes/oracle/reiniciar-secuencia.html. La última vez que miré contenía HTML válido con CSS fresquito y si tiene flatas de ortografía ha sido sin querer.

borrame.com es el sitio anteriormente conocido como bits.demogracia.com (no confundir con Demogracia, que sólo pasaba por ahí).

© 2005-2011 by Álvaro G. Vicario (alvaro.es) • Burgos (España) • borrame.com