Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/06/2012, 09:57
jjrico
 
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 :)