PDA

Ver la Versión Completa : Como creo una clave autonumerica?


manoloolmedo
26/03/08, 10:23:55
Mi duda es como crear un campo clave en una tabla que sea autonumerico?? Es decir, tal como te los crea ACCESS.

Mi problema es que tengo una tabla donde se van recogiendo incidencias, y me gustaria crear una clave de tabla que se rellene automaticamente sin tener que preocuparme.

Espero vuestra respuesta. GRACIAS DE ANTEMANO.

robert_milan
26/03/08, 10:26:18
porque no le haces un select coun(*) into var1 a la tabla y le agregar 1 cada ves que ocurra una incidencia?'..

saludos

agv1976
26/03/08, 11:21:34
Asignale el sy-tabix a cada pasada en un campo que te lo declares como num

ballan
26/03/08, 14:36:59
Para eso se utilizan los rangos, puedes crearte un rango mediante la transaccion SNRO, van contra un elemento de datos que es el que le asigna la longitud (por ejemplo contra el numero de pedido EBELN que tiene longitud 10)

Luego para ir consumiendo numeros de un rango utilizas la funcion NUMBER_GET_NEXT que te garantiza la asignacion correcta de numeros teniendo en cuenta todas las casuisticas posibles ya que por ejemplo un problema al ir asignando manualmente es tener en cuenta que puede haber varios usuarios interactuando a la vez y a 2 que entren en el mismo instante se les puede asignar el mismo numero

manoloolmedo
26/03/08, 14:58:21
Ballan voy a probar lo que me dices sobre los rangos. Te informo cuando obtenga resultados.

MUCHAS GRACIAS A TODOS.

manoloolmedo
27/03/08, 09:34:38
:) Muchas gracias BALLAN por tu ayuda. He probado la funcion NUMBER_GET_NEXT y todo va bien.

Voy a contar un poco lo que he hecho y asi puede que le sirva a otros.

1.- Creas un RANGE en la SNRO.
2.- Le defines un intervalo a este rango (del 0 a 9999999 por ejemplo).

3.- En tu report haces una llamada a la funcion NUMBER_GET_NEXT tal que asi:


DATA: numero TYPE i.

CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = '1'
object = 'RANGO_CREADO'
QUANTITY = 1
IMPORTING
NUMBER = numero
EXCEPTIONS
INTERVAL_NOT_FOUND = 1
NUMBER_RANGE_NOT_INTERN = 2
OBJECT_NOT_FOUND = 3
QUANTITY_IS_0 = 4
QUANTITY_IS_NOT_1 = 5
INTERVAL_OVERFLOW = 6
BUFFER_OVERFLOW = 7
OTHERS = 8.

Automaticamente te devuelve en NUMERO el siguiente valor del rango. Asi que ya tienes creado tu valor autonumerico.

GRACIAS A TODOS y en especial a ti BALLAN.