Cita:
la principal desventaja de mi sistema es que tiende a generar huecos.
|
Los generadores se diseñaron para garantizar la unicidad en entornos multiusuario y no es relevante que sean consecutivos. Las 'brechas' numéricas son
muy normales con su uso.
El tema de los 'huecos' se presenta por ejemplo cuando: El usuario A obtiene el identificador 500, seguidamente el usuario B recibe el 501,
el C el 502, etc. Entonces el usuario A decide abortar haciendo un rollback, el generador continuará la secuencia sin importar la posición 500.
Para hacer códigos consecutivos podés incrementar un campo mediante un trigger y usar un procedimiento almacenado para obtener el próximo código.
Por ejemplo:
Código SQL
[-]
SET TERM ^;
CREATE TRIGGER TABLA_CODIGO_AI FOR TABLA_CODIGO ACTIVE AFTER INSERT POSITION 0
AS
BEGIN
UPDATE TABLA_CODIGO SET NUM_CODIGO = NUM_CODIGO + 1;
END^
CREATE PROCEDURE SP_PROXIMOCODIGO RETURNS (PROXCOD CHAR(8))
AS
DECLARE VARIABLE NUMERO INTEGER;
BEGIN
SELECT NUM_CODIGO FROM TABLA_CODIGO INTO NUMERO;
NUMERO = NUMERO + 1;
PROXCOD = LPAD(TRIM(CAST(NUMERO AS VARCHAR(8))), 8, '0');
END^
SET TERM ;^
El procedimiento te devolverá el próximo siguiente código. (00000001,00000002,00000003,..)
Un saludo.