Ver Mensaje Individual
  #6  
Antiguo 29-04-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 29-04-2011 a las 03:44:52.
Responder Con Cita