como generar un numero dependiendo de otros campos

katy
08 de Julio del 2004
hola

soy nueva utilizando el form, y necesito generar un numero en donde se componga del año del ejercicio, del mes, y de tipo, y el consecutivo
en una tabla tengo los campos de ejercicio,mes, y tipo.

ejercicio mes tipo
2004 5 E
2004 5 I
de acuerdo a esto se estara generando un numero consecutivo digamos sera
0405E001
0405E002
0405E003
0405I001
0405I002
segun lo que he leido para hacer esto tengo que hacer un trigger o me conviene hacer una funcion
please necesito ayuda


mjpp
08 de Julio del 2004
Me imagino q lo q necesitas es un secuencial, pues create una secuencia (tipo oracle) q obtengas en el pre-insert del bloque.

CREATE SEQUENCE misecuencia INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOMINVALUE
NOCYCLE
/

en el pre.insert
select misecuencia.nextval into :bloque.camposecuencial from dual;

espero q te sirva
NOCACHE

ulalve®
08 de Julio del 2004
Por lo que veo quieres tener un consecutivo de 3 digitos por EJERCICIO, MES y TIPO.

Te sugiero busques el valor maximo por cada tipo, lo descompongas, le incrementes 1 y que lo concatenes con los otros campos para obtener el nuevo numero. Te dejo un ejemplo:

SELECT MAX(NUMERO) Num_Max
FROM <<TABLA>>
WHERE SUBSTR(NUMERO, 1, 2) = EJERCICIO
AND SUBSTR(NUMERO, 3, 2) = MES
AND SUBSTR(NUMERO, 5, 1) = TIPO

Num := TO_NUMBER( SUBTR( Num_Max, 6, 3) ) + 1
/*Obtienes la cadena '003', lo conviertes a numero y lo incrementas*/

New_Num := EJERCICIO|| MES||TIPO|| LPAD(Num, 3, 0);
/*Concatenas los campos y le agregas ceros a la izquierda hasta completar el numero. */

Espero que te sirva.

Saludos.