Cómo realizar un UPDATE masivo en Oracle ignorando los errores

¿Cuántas veces has tratado de hacer un UPDATE masivo en Oracle y la consulta ha fallado porque hay elementos duplicados, nulos, etc.?
Ejecutar un UPDATE masivo que continúe e ignore las tuplas con error es posible en Oracle siguiendo el siguiente proceso:

Primero, creamos una tabla que vincule la tabla que vamos a actualizar con la que va a guardar los errores. Así podremos saber qué tuplas han fallado:
EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('tabla1', 'tabla1_error_log');

Después, ejecutamos el UPDATE incluyendo al final de la consulta la llamada LOG ERRORS hacia la tabla log creada. Por ejemplo:
UPDATE tabla1 
  SET nombre="" 
  WHERE pais="es"
LOG ERRORS 
  INTO tabla1_error_log 
  ('UPDATE running at '||to_char(sysdate, 'yyyy-MM-dd HH24:MI:SS')) 
  REJECT LIMIT UNLIMITED;

Cuando termine el UPDATE, podremos consultar en tabla1_error_log la lista de errores y cuando no la necesitemos, la podemos borrar con el habitual DELETE


Detalles técnicos:
Lenguajes: Oracle 10
Referencias: Tutorial detallado de Oracle

No hay comentarios:

Publicar un comentario