ESPAÑOL: ¡Bienvenido! Es la página inicial de OSIRIS LMS. Regístrese hoy mismo y obtenga acceso a todos nuestros CURSOS GRATUITOS. Clic aquí para registrarse ya. Hemos desarrollado una amplia gamma de cursos “online” (Programación, Multimedia, 3D, Habilidades suaves, etc.), disponibles 24X7. Para más detalle consulte la lista de Cursos Disponibles. Si tiene problemas con el acceso a la plataforma, vea el Tour Virtual de Osiris LMS. También puede consultar la sección de FAQ’s o enviar Solicitud de Soporte Técnico.

ForoForo de discusión
Modificar el valor de una secuencia sin eliminarla en Oracle
Buscador:
Foro > Oracle FAQ > Modificar el valor de una secuencia sin eliminarla en Oracle

Enviado por: Texto del mensaje
Support Osiris LMS 
Nivel : Jefe de Administradores
Mensajes : 114
> Perfil
Escrito el : Martes 30-01-2007 A las : 04:26 ( > un mes )
Asunto : Modificar el valor de una secuencia sin eliminarla en Oracle
Vamos a crear un procedimiento almacenado mediante cual podemos modificar el valor actual de una secuencia sin tener que eliminar y volver a crearla:

CREATE OR REPLACE PROCEDURE setSequence (seqname IN VARCHAR2, newnumber IN INTEGER) as
curr_val INTEGER;
curr_inc INTEGER;
curr_min INTEGER;
BEGIN
SELECT INCREMENT_BY, MIN_VALUE into curr_inc, curr_min from user_sequences where sequence_name = upper(seqname);
EXECUTE IMMEDIATE 'ALTER SEQUENCE ' ||seqname||' MINVALUE ' || LEAST((newnumber - curr_inc - 1) , curr_min) ;
EXECUTE IMMEDIATE 'SELECT ' ||seqname ||'.nextval FROM dual' INTO curr_val;
IF (newnumber - curr_val - curr_inc) != 0 THEN
EXECUTE IMMEDIATE 'ALTER SEQUENCE ' ||seqname||' INCREMENT BY '||(newnumber - curr_val - curr_inc);
END IF;
EXECUTE IMMEDIATE 'SELECT ' ||seqname ||'.nextval FROM dual' INTO curr_val;
EXECUTE IMMEDIATE 'ALTER SEQUENCE ' ||seqname||' INCREMENT BY ' || curr_inc;
END setSequence;
/


Ejemplo de ejecución:

exec setSequence ('<nombre_secuencia>', <valor>);
Soporte de Osiris LMS
Amplía tus conocimientos en línea