Diseñando una tabla para almacenar documentos, se encontró que la cantidad de registros que se requería almacenar era bastante considerable. Eso no representaba un problema en realidad. La dificultad era como generar los código correspondientes, tomando en cuenta que requería que dichos códigos comenzaran con los caracteres DOC seguido de una secuencia numérica, y obtener la menor longitud máxima de siete caracteres.
Si se hace uso de cuatro dígitos decimales, es posible obtener hasta diez mil códigos: desde DOC0000 hasta DOC9999.
Si se hace uso de cuatro dígitos decimales, es posible obtener hasta diez mil códigos: desde DOC0000 hasta DOC9999.
Considerando que el código ya tenía una estructura alfanumérica, por qué no usar cuatro dígitos hexadecimales y obtener así un mayor número de códigos, en lugar de usar cuatro dígitos decimales.
De lo anterior, se deduce que es posible generar hasta 65535 códigos: desde DOC0000 hasta DOCFFFF, aumentando considerablemente la cantidad de códigos y usando la misma cantidad de dígitos.
Para la generación automática del código, se toma la parte numérica del último registro y se le suma uno. Cuando la tabla esta vacía, se asigna de forma directa el código DOC0001 al primer registro que se agregue a la tabla.
Se crea una variable en MySQL de tipo VARCHAR, con una longitud de siete caracteres.
Se consulta el último código almacenado en la tabla y se le asigna a la variable docCode. Mediante el uso de un IF, se determina si debe generarse un nuevo código o si debe asignarse el DOC0001DECLARE docCode VARCHAR(7);
IF docCode IS NULL THENPara la convertir los códigos de decimal a hexadecimal y viceversa, se hace uso de la función CONV que incluye MySQL.
SET docCode = 'DOC0001';
ELSE
SET docCode = //instrucción para generar el código
END IF;
CONV(N,from_base,to_base)Para obtener el último registro se hace uso de la función MAX y, para separar la parte numérica, se hace uso de RIGHT.
Convierte números entre diferentes bases numéricas. Retorna una representación de cadena de carácters para el número N, convertido de base from_base a base to_base. Retorna NULL si algún argumento es NULL. El argumento N se interpreta como entero, pero puede especificarse como un entero o cadena. La base mínima es 2 y la máxima es 36. Su to_base es un número negativo, N se trata como un número con signo. De otro modo, N se trata como sin signo. CONV() funciona con precisión de 64-bit.
En este caso, la tabla se llama documents y el campo correspondiente al código se llama idCode.
A continuación, el código completo:
BEGIN
DECLARE docCode VARCHAR(7);
SET docCode = (SELECT CONV(MAX(RIGHT(documents.idCode,4)),16,10)+1 FROM documents);
IF docCode IS NULL THEN
SET docCode = 'DOC0001';
ELSE
SET docCode = CONCAT('DOC',REPEAT('0',4-LENGTH(docCode)),CONV(docCode,10,16));
END IF;
//Aquí continua con el INSERT
END;
No hay comentarios.:
Publicar un comentario