Mostrando entradas con la etiqueta Oracle. Mostrar todas las entradas
Mostrando entradas con la etiqueta Oracle. Mostrar todas las entradas

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

Aplicación web DigiQ

DigiQ es una aplicación web desarrollada por Schneider-Electric para la creación y gestión de presupuestos y pedidos en las delegaciones de los países de categoría "C". Este proyecto hace uso de PHP5, Sencha Ext JS 2, SAP y Oracle y ya estaba en producción cuando me incorporé a él. Mis tareas consistieron en el desarrollo de alguna característica nueva y mantenimiento del producto.

Capturas de pantalla: