Sequencias en ORACLE

SQL, mySQL, postgreSQL y otros motores
Responder
osquiabro
Al nivel de RZ
Mensajes: 179
Registrado: Dom Feb 06, 2011 10:06 pm
Contactar:

Sequencias en ORACLE

Mensaje por osquiabro » Jue Oct 27, 2011 6:48 pm

Como funciona los autonumerados con ORACLE, segui el ejemplo del help y pude capturar la sequencia de la tabla definida pero luego que grabo la sequencia no incrementa este es el codigo que usa para caputar la sequencia le tuve que cabiar el from que decia dual por el nombre de la tabla

Código: Seleccionar todo

Access:ZEQ_243.Open
ZEQ_243{Prop:SQL}='Select ZEQ_243.Nextval from ZEQ_243'
IF ~Access:ZEQ_243.Next()
    PAY:BATCHKEY=ZEQ:NEXTVAL
    !MESSAGE(PAY:BATCHKEY)
END
que estoy haciendo mal o hay otra forma?
segun el help:
Oracle Sequences:

To use Oracle Sequences:

1. Define an Oracle Sequence for the auto incremented key.

See your Oracle documentation:

CREATE SEQUENCE GlobalSequence

INCREMENT BY 1

START WITH 1

NOMAXVALUE

MINVALUE 1

NOCYCLE

CACHE 30;



2. Declare a Clarion file to receive the sequence number from the Oracle Sequence like this:

CustomerSequence FILE,DRIVER('ORACLE'),PRE(CUST),CREATE,THREAD

Record RECORD,PRE()

SequenceNo LONG

END

END

3. Assign the incremented sequence number to your key field by embedding the following in the WindowManager Method Executable Code Section - PrimeFields embed point:

Access:CustomerSequence.Open

CustomerSequence{Prop:SQL}='Select GlobalSequence.Nextval from dual'

IF ~Access:CustomerSequence.Next()

Cust:CustNo=SequenceNo

END

where Cust:CustNo is the label of your auto-incremented key field in your Oracle data file.

4. Set the embedded code priority to 7500.
Saludos!

Omar Squiabro
Puerto Rico


LeoPalomares
Ayudante de Santa
Mensajes: 53
Registrado: Lun Feb 07, 2011 10:50 pm
Contactar:

Re: Sequencias en ORACLE

Mensaje por LeoPalomares » Jue Oct 27, 2011 7:54 pm

Hola Omar,

Una secuencia en Oracle es una entidad independiente de la tabla, puede definirse una secuencia para cualquier cosa que necesite una numeración.

Una vez definida la secuencia se obtiene el próximo número con la función NextVal la cual siempre retorna el próximo número de la secuencia por lo tanto ante cada invocación obtendrás siempre un número nuevo

Para obtener el próximo número de la sequencia la sintaxis habitual es:
SELECT NombreSecuencia.NextVal FROM DUAL

donde NombreSecuencia es el nombre de la secuencia de la que se quiere obtener el próximo número.
DUAL es una pseudotabla de Oracle la cual tiene muchas utilidades prácticas y una de ellas es para acceder a las secuencias.

El valor retornado por la SELECT anterior es el que hay que asignar al campo de la tabla que necesitás numerar.

IMPORTANTE: NO se debe usar una secuencia para ningún tipo de numeración en la que los valores deban ser correlativos dado que una vez obtenido el número de una secuencia no es posible volverlo a obtener y, por lo tanto, si la operación se cancela el número se pierde.
Además las secuencias implementan un caché (por razones de rendimiento) por lo que pueden haber huecos en la numeración debido a este caché (al reiniciar la instancia del Oracle se pierden los números que las secuencias tengan en caché y no hayan sido utilizados).
Saludos!!!

Leo Palomares

osquiabro
Al nivel de RZ
Mensajes: 179
Registrado: Dom Feb 06, 2011 10:06 pm
Contactar:

Re: Sequencias en ORACLE

Mensaje por osquiabro » Jue Oct 27, 2011 9:12 pm

gracias leo por la info logre hecharlo andar el asunto es que la documentacion del sistema que estoy trabajando indicaba que la tabla secuencial era ZEQ_243 y en realidad era V7SEQ_243, me di cuenta cuando corri el create sequence del help de clarion que las tablas de secuencia se crean en otro sitio.

En el DCT a nivel del driver le indique el select de tabla de la sequencia y al campo que se autonumera le puse la instruccion IsIdentity=True y todo trabajo de show.
Saludos!

Omar Squiabro
Puerto Rico


Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 31 invitados