
Como usar un id autoincrementable con dbexpress
#1
Posted 24 January 2009 - 11:20 AM
Cual creen que sea la mejor forma de hacerlo usando dbexpress?
Ax
#2
Posted 24 January 2009 - 11:22 AM
El uso con dbExpress no debe resultarte un problema ya que el no es el responsable de esa generación.
Saludos
#3
Posted 24 January 2009 - 11:34 AM
Ax
#4
Posted 16 April 2009 - 08:08 AM
Otra alternativa es el uso de una consulta previa a la tabla para recuperar el último valor generado (mediante un max) e incrementarlo en 1, pero la consulta debe ser realizada mediante la sentencia select for update para bloquear la tabla justo antes de la inserción y así evitar que se otorge otro valor igual a otro usuario que intente insertar otro registro en la misma tabla.
#5
Posted 16 April 2009 - 08:18 AM

Saludos.
#6
Posted 16 April 2009 - 09:29 AM
Muchas gracias por esta información Roberboy, no sabía que Oracle tenía esa desventaja, Bienvenido al foro compañero
.
Saludos.
En realidad no es una desventaja de oracle ene. Por definición un campo autoincrementable debe generar valores únicos e irepetibles. Tanto los campos Identity de Sql Server como los AutoInc de Mysql, access, etc Presentan este comportamiento. Y por supueesto cada motor ofrece maneras de redefinir los valores del contador. Así sucede con orale. Las secuencias pueden ser redefinidas.
Coincido con rebertboy en el sentido de que usar campos autoincrementables genera huecos. Por tanto la solución optima es calcular el siguiente Id como lo menciona él mismo.
Saludos afectuosos.
#7
Posted 16 April 2009 - 09:38 AM
Coincido con rebertboy en el sentido de que usar campos autoincrementables genera huecos. Por tanto la solución optima es calcular el siguiente Id como lo menciona él mismo.
Hola
Pero entonces de que sirve tener un campo autoincrementable, mejor se usa un ID de tipo entero donde vas acumulando el valor.
Personalmente evito ese tipo de campos y me voy por la carretera vieja, al final tal ves sea menos costosa

Salud OS
#8
Posted 16 April 2009 - 09:46 AM
Coincido con rebertboy en el sentido de que usar campos autoincrementables genera huecos. Por tanto la solución optima es calcular el siguiente Id como lo menciona él mismo.
Hola
Pero entonces de que sirve tener un campo autoincrementable, mejor se usa un ID de tipo entero donde vas acumulando el valor.
Personalmente evito ese tipo de campos y me voy por la carretera vieja, al final tal ves sea menos costosa
Salud OS
Existen opiniones divididas al respecto. Hay quienes abogan por la rapidez en la generación de Ids únicos sin necesidad de consultar la tabla especialmente si esta tiene millones de registros y es de muy alta transaccionalidad. Y hay quienes preferimos el método comentado por robert.
Para ambos la razon nos asiste, Así que lo mejor es usar lo que mejor le funcione a cada quien.
Saludos.
#9
Posted 16 April 2009 - 12:26 PM
La palabra depende cae bien para este tema, si es para una tabla que no tiene importancia su secuencia como tal por ejemplo: Tipo de Cliente, veo muy bien el uso de auto incremento pero si es para una tabla de documento por ejemplo: Factura; si apoyo la moción de utilizar una tabla para guardar el valor en secuencia tal como explica Egostar.
CREATE SEQUENCE SEQ_1 minvalue 0 maxvalue 999999999999999999999999999 START WITH 1 INCREMENT BY 1 nocache ORDER; CREATE OR REPLACE TRIGGER TRG_BEFORE_INSERT BEFORE INSERT ON TABLA1 FOR EACH ROW BEGIN IF :NEW.ID IS NULL THEN SELECT SEQ_1.NEXTVAL INTO :NEW.ID FROM dual; END IF; END;