Ver Mensaje Individual
  #2 (permalink)  
Antiguo 24/11/2008, 09:08
MutenRo
 
Fecha de Ingreso: marzo-2008
Ubicación: Euskadi
Mensajes: 64
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: secuencia para generar numeros con fechas

Hola azukita,

se me hace algo extraño que realmente se necesite hacer algo así (¿por qué no una campo para la secuencia y otro para el año aunque la secuencia de cada año no empiece por 1?), pero bueno, se me ha ocurrido esta manera:

- Para la secuencia de cada año tendrás un máximo en mente, supongo, de n cifras (supongamos que son 6, así podremos tener casi un millón), que en ningún caso se va a alcanzar. Entonces creas para empezar una secuencia que empiece por 2008000001:

Código:
CREATE SEQUENCE SEQ_PRUEBA START WITH 2008000001 INCREMENT BY 1;
- Por otra parte creas esta función, que será a la que vas a llamar siempre que quieras obtener un valor de la secuencia:

Código:
CREATE OR REPLACE FUNCTION FN_NEXTVAL RETURN NUMBER 
 IS
 v_num_sec NUMBER;
 v_primera NUMBER;
 
 BEGIN
 
 SELECT SEQ_PRUEBA.NEXTVAL INTO v_num_sec FROM DUAL;
 
 IF(SUBSTR(TO_CHAR(v_num_sec),1,4) <> TO_CHAR(SYSDATE,'YYYY')) THEN
     v_primera := TO_NUMBER(TO_CHAR(SYSDATE,'YYYY')) * POWER(10,LENGTH(v_num_sec)-4) + 1;
     WHILE(v_num_sec < v_primera)
     LOOP
          SELECT SEQ_PRUEBA.NEXTVAL INTO v_num_sec FROM DUAL;
     END LOOP;
 END IF;
 
 RETURN v_num_sec;
 
END FN_NEXTVAL;
/
De esta manera vas a obtener el número de secuencia adecuado en cada momento, sabiendo que los 4 primeros dígitos son el año y el resto son la secuencia para cada año.
Y si estás trabajando con Oracle 11g recuerda que no hace falta hacer una select para obtener el siguiente número de secuencia, basta con escribir 'variable := seq.NEXTVAL;'.

Un saludo.