miércoles, 5 de febrero de 2014

Crear un sequence con el maximo id de una tabla con execute immediate

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