Ten en cuenta que en las ciencias cualquier problema casi siempere suele tener diferentes soluciones, así que nosotros aquí mostramos lo más óptimo y mejor.
Solución:
Aquí hay un buen procedimiento para restablecer cualquier secuencia a 0 del gurú de Oracle Tom Kyte. Gran discusión sobre los pros y los contras en los enlaces a continuación también.
[email protected]>
create or replace
procedure reset_seq( p_seq_name in varchar2 )
is
l_val number;
begin
execute immediate
'select ' || p_seq_name || '.nextval from dual' INTO l_val;
execute immediate
'alter sequence ' || p_seq_name || ' increment by -' || l_val ||
' minvalue 0';
execute immediate
'select ' || p_seq_name || '.nextval from dual' INTO l_val;
execute immediate
'alter sequence ' || p_seq_name || ' increment by 1 minvalue 0';
end;
/
Desde esta página: SQL dinámico para restablecer el valor de la secuencia
Otra buena discusión también está aquí: ¿Cómo restablecer secuencias?
A true reiniciar no es posible AFAIK. (¡Por favor corrígeme si estoy equivocado!).
Sin embargo, si desea establecerlo en 0, simplemente puede eliminarlo y volver a crearlo.
Si desea establecerlo en un valor específico, puede establecer el INCREMENTO en un valor negativo y obtener el siguiente valor.
Es decir, si su secuencia está en 500, puede establecerla en 100 a través de
ALTER SEQUENCE serial INCREMENT BY -400;
SELECT serial.NEXTVAL FROM dual;
ALTER SEQUENCE serial INCREMENT BY 1;
Este es mi enfoque:
- soltar la secuencia
- recrearlo
Ejemplo:
--Drop sequence
DROP SEQUENCE MY_SEQ;
-- Create sequence
create sequence MY_SEQ
minvalue 1
maxvalue 999999999999999999999
start with 1
increment by 1
cache 20;