Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Problema con secuencia

Estas en el tema de Problema con secuencia en el foro de Oracle en Foros del Web. Buenos dias, Explico, Cita: MEMBER FUNCTION Inserta RETURN NUMBER IS vnu_secuencia_tabla NUMBER(2); vva_reg_new VARCHAR2(4000); BEGIN SELECT SEC_SU_TIPOS_COMPETENCIA.NEXTVAL INTO vnu_secuencia_tabla FROM DUAL; vva_reg_new := vnu_secuencia_tabla||'|'||pva_descripcion; INSERT ...
  #1 (permalink)  
Antiguo 02/06/2012, 09:57
 
Fecha de Ingreso: septiembre-2011
Mensajes: 4
Antigüedad: 12 años, 7 meses
Puntos: 1
Problema con secuencia

Buenos dias,
Explico,

Cita:
MEMBER FUNCTION Inserta RETURN NUMBER
IS
vnu_secuencia_tabla NUMBER(2);
vva_reg_new VARCHAR2(4000);
BEGIN

SELECT SEC_SU_TIPOS_COMPETENCIA.NEXTVAL
INTO vnu_secuencia_tabla
FROM DUAL;

vva_reg_new := vnu_secuencia_tabla||'|'||pva_descripcion;

INSERT INTO PORTALTH.su_tipos_competencia (ID_TIPO_COMPETENCIA,
DESCRIPCION)
VALUES(vnu_secuencia_tabla,
pva_descripcion);
COMMIT;

IF(ONE_SU_LOG_ACCION.FNC_SU_EJECUTA_ACCION(NULL, 'SU_TIPOS_COMPETENCIA', pva_usuario, pch_accion, vva_reg_new, vva_reg_new) = FALSE) THEN
RETURN 4;
END IF;

RETURN 1;

EXCEPTION WHEN OTHERS THEN
--Si existe error se retorna un falso para que lo controle LA INTERFAZ DE USUARIO
RETURN 0;

END Inserta;
Tengo ese procedimiento, osea todo me funciona bn, lo ando trabajando con JAVA y recibo bn las cosas, el problema es que uno como programador debe suponerse las "peores" cosas o "usuarios", asi que hay que hacer pruebas de riesgo y eso, haciendo dichas pruebas note algo referente a la secuencia


Cita:
SELECT SEC_SU_TIPOS_COMPETENCIA.NEXTVAL
INTO vnu_secuencia_tabla
FROM DUAL;

vva_reg_new := vnu_secuencia_tabla||'|'||pva_descripcion;

INSERT INTO PORTALTH.su_tipos_competencia (ID_TIPO_COMPETENCIA,
DESCRIPCION)
VALUES(vnu_secuencia_tabla,
pva_descripcion);
COMMIT;

IF(ONE_SU_LOG_ACCION.FNC_SU_EJECUTA_ACCION(NULL, 'SU_TIPOS_COMPETENCIA', pva_usuario, pch_accion, vva_reg_new, vva_reg_new) = FALSE) THEN
RETURN 4;
END IF;
como podemos ver yo saco la seguencia al ejecutarla si el valor anterior fue 1, coge el 2, y asi, el problema vendria en que si hay un error en el insert la secuencia ya estaria inicializada y no me tomaria el valor que es a la hora del insert, explico...


Hago un insert y todo sale bn, el codigo principal (que se saca de la secuencia) seria 1, hago otro insert y sale bn, seria 2 el codigo principal...

hago de nuevo otro insert y falla :0...

hago de nuevo un insert y sale bn, el codigo principal es 4...

si me hago entender? hay un salto, como hago para quitar dicho salto, osea si hubo error, listo no me guarda, pero cuando ya halla un insert valido me coga el valor que sigue del codigo principal...

Gracias por la ayuda :)

Etiquetas: funcion, secuencia, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:37.