PDA

Ver la Versión Completa : Ayuda - Campo AUTO - Base de Datos


cotymel
07-07-2011, 14:20:15
Hola, tengo el siguiente inconveniente:
En una base de datos tengo una tabla (HOJADERUTAS) con los siguientes campos:
(Key)NUMHOJADERUTA / AUTO
IDCADETE / SMALLINT
FECHORAPARTIDA / TIMESTAMP
FECHORALLEGADA / TIMESTAMP

El campo (NUMHOJADERUTA) está generado por un generador (GEN_HOJADERUTA) con un objeto trigger (CREATE_HOJADERUTA) con la siguientes característica:
Tipo BEFORE INSERT...
As
Begin
NEW.NUMHOJADERUTA = GEN_ID (GEN_HOJADERUTA, 1);
end

Concretamente el inconveniente es que venía funcionando bien (el número de hoja de ruta actual es el 32767), pero ahora cuando se genera una hoja de ruta nueva me está arrojando el siguiente error:
32769 n´est pas une valeur correcte pour le champ 'NUMHOJADERUTA' les valueurs doivent etre comprises entre 32768 et 32767

La cosa que no puedo generar más hojas de rutas y la situación en la empresa es un caos y me están por colgar!!! :eek:

marcoszorrilla
07-07-2011, 15:44:12
Create una tabla nueva, con el campo como BigInt traspásele todos los datos de la antiguga, elimina la antigua, renombra la nueva al nombre de la antigua y creo que tendrás resuelto el problema.

Un Saludo.

Casimiro Notevi
07-07-2011, 16:27:04
Create una tabla nueva, con el campo como BigInt traspásele todos los datos de la antiguga, elimina la antigua, renombra la nueva al nombre de la antigua y creo que tendrás resuelto el problema.

Un Saludo.


Está claro que el campo clave NUMHOJADERUTA es un smallint, debes cambiarlo como te ha informado marcoszorrilla, por un tipo de campo mayor.
El smallint sólo llega hasta 32767

cotymel
08-07-2011, 16:18:59
Muchas gracias por tus comentarios.
No estoy muy ducho en el tema, por eso consulto.
En caso de proceder como indicás, al colocar al campo como BigInt la generación del número de NUMHOJADERUTA (que hoy se genera en forma automática a través del GEN_HUJADERUTA) se verá afectado?

marcoszorrilla
08-07-2011, 16:53:46
Como el nombre del campo es el mismo no tendrías que realizar ningún cambio.

Puedes desde ISQL comprobar el estado del generador, es decir en que número se encuentra en estos momentos.

ISQL> SHOW GENERATOR Nombre_Del_Generador;

Un Saludo.

cotymel
19-07-2011, 20:33:49
Marcos muchas gracias por tus indicaciones.
Ahora te consulto lo siguiente, pude crear la tabla nueva, pasarle todos los datos, lo que no puedo es renombrar las tablas.
Cómo debo proceder?
Nuevamente gracias. Saludos.

Casimiro Notevi
19-07-2011, 21:17:25
Amigo, eso ya se te ha contestado más arriba:

Créate una tabla nueva, con el campo como BigInt traspásele todos los datos de la antigua, elimina la antigua, renombra la nueva al nombre de la antigua y creo que tendrás resuelto el problema.


;)

cotymel
20-07-2011, 18:10:55
Muchas gracias por contestarme Casimiro.
Tengo claro lo que anteriormente me aconsejaron, lo que estoy consultando ahora es:
-Cómo procedo para renombrar la tabla? Ya que es lo único que hasta ahora no logré hacer.
Nuevamente gracias.

Chris
20-07-2011, 18:23:12
Me parece que solo es necesario cambiar el tipo de campo desde SmallInt a Integer o BigInt. Creo que no tendrás que utilizar una tabla intermedia, pues estarías cambiando el tipo de datos entre similares. SmallInt => Integer.

Por otro lado, tengo la impresión que utilizar BigInt sería demasiado. Esto lo digo porque creo que el valor de los generadores solamente soportan valores entre el rango de Integer, no más. Si estoy equivocado, entonces procede a utilizar BigInt si haces inserciones masivas en la susodicha tabla.

Saludos,
Chris.

Casimiro Notevi
20-07-2011, 18:23:45
No recuerdo exactamente, echa un vistazo a ver si lo encuentras.
Aunque puedes pasar los datos a una nueva con el nombre ya correcto.
Algo así como:
Insert into tutabla (select * from tablatemporal)