Commit manual OWB

Buenas tardes,

 

Os comento el problema que me ha surgido, en los flujos, cuando lanza algun mapeo o un procedimiento, nos surgió la duda de como realizar un rollback de los datos. Por otros foros descubrimos que lo suyo es configurar el mapeo, como commit manual, y al final del flujo si todo ha ido correcto, hacer un rollback o un commit. Pinta sencillo, hemos configurado todo así, pero parece ser que aun configurando la correspondencia como manual, hace un commit igualmente. ¿Sabeis algo al respecto de porque puede estar pasando esto?

 

Gracias.

Os cuento más detenidamente... tengo un flujo que carga dos tablas. Tengo en ambas tablas configurado el commit manual. Y se me pueden dar los siguientes casos:

- Las dos tablas cargan mal: En cuanto una carga mal, hace rollback y pasa a la siguiente. Tambien carga mal, hace rollback y termina. Hasta aqui perfecto.

- Una tabla carga bien y la otra mal: Una tabla carga mal, por lo que hace el rollback y pasa a la siguiente. La siguiente carga bien, entonces hace commit de esta (a pesar de tenerlo configurado como manual).

 

Mi problema está en que no me interesa que haga commit hasta el final, en cuanto una tabla falle, quiero que haga un rollback de todo, y lo que hace es hacer rollback unicamente de la tabla que ha fallado.

En respuesta a por penyo

Supongo que utilizas el operador 'post mapping' para hacer el commit o rollback final, no? En teoría si lo configuras como manual, y lo controlas con este operador debería actuar sobre todo lo anterior. Si ya lo haces así puede que necesitemos que intervenga alguien que se haya peleado más con estas opciones ;)

Te enlazo también sección Embedding Commit Logic into the Mapping del Manual de Usuario de OWB 10.2, por si no lo has consultado aún, siguiendo los enlaces de las diferentes opciones puede que encuentres lo que te está pasando..

Buenos días! Eso es lo que tengo hecho, pero tengo el OWB 11.2 y no se porque no me lo realiza bien, he leido en el link que, se puede hacer con un SQL*PLUS, lo he intentado de diversas maneras y se queda bloqueado en el lanzamiento del SQL*PLUS. Lo he puesto tal cual viene en el link de oracle:

begin 

carga_fallo.main(status);

 if status!='OK' then rollback

   else carga_fallo2.main(status); 

 if status!='OK' then rollback;

   else commit;

 end if;

 end if;

end;

La sintaxis es erronea con total seguridad. ¿Sabéis algo al respecto?

 

Gracias por la ayuda y un saludo.

En respuesta a por penyo

No sé si entiendo bien la lógica, pero creo que te falta el punto y coma después del rollback, y los paréntesis en la condición del IF siempre son acosejables. Prueba con esto:

begin
  carga_fallo.main(status);
  if (status!='OK') then rollback;       
  else carga_fallo2.main(status);
      if (status!='OK') then rollback;
      else commit;
      end if;
  end if;
end;

En respuesta a por Carlos

Hola!

Si, gracias Carlos, lo había modificado, tal y como me lo has puesto tu ahora. Pero nada, no hay manera, creo que no interpreta bien los mapeos, no estoy seguro de que la sentencia sea "mapeo.main" y no he encontrado nada al respecto por internet.