Seguimos solucionando desaguisados y nos hemos encontrado con una tabla que no tiene ningún sequence para generar ids y se estaban metiendo a pelo.
Como en los distintos entornos (desarrollo, pruebas, producción,...) la tabla en cuestión tiene distinto número de elementos y queremos una solución única para todos los entornos voy a coger el máximo valor del id de la tabla para que la sequence se quede con ese valor para generar el próximo id.
Para ello vamos a usar la función execute immediate dentro de un script que solucionará nuestros problemas.
Primero declaramos una variable integer donde guardar el max id y con una fácil select le añadimos dicho valor. Luego para crear el sequence usamos execute immediate que va a ejecutar lo que le pasemos como parámetro, así que le pasamos el código para crear la secuencia concatenando el valor obtenido antes y asunto solucionado.
Os dejo un ejemplo para que lo disfruteis:
declare
secuencia integer;
begin
select max(id)+1 into secuencia from tabla_sin_sequence;
execute immediate 'CREATE SEQUENCE SEQ_TABLA
MINVALUE 1
MAXVALUE 999999999999999999999999999
INCREMENT BY 1
START WITH ' ||secuencia ||
' NOCACHE
ORDER
CYCLE';
end;
/
No hay comentarios:
Publicar un comentario