Hola Lista Estaba realizando un cargue de un archivo Excel con información de clientes bancarios con tarjeta para un call center poblando un modelo maestro, detalle y tabla de llamadas telefónicas. En un principio se implemento por medio de una herramienta de ETL con los controles que ofrece la herramienta ETL y para bases de 10.000 registros duraba hasta 3 horas si no se caída por memoria, por lo tanto me lo asignaron para optimizarlo y decidí realizar las operaciones de ordenamiento, limpieza y filtro de datos directamente en la base de datos (donde es natural) aun empleando el cascaron de la herramienta de ETL (pues debe integrase con otro sistema); dentro de uno de los pasos, ya para insertar los datos en las diferentes tablas, implemente un código similar al siguiente empleando WITH:
WITH base AS ( INSERT INTO maestro ( fechacreacion, fechamodificacion, idusuariocrea, departamento, documento, municipio, primerapellido, primernombre, telefono1, tipodocumento, direccion, email) SELECT now(), now(), 1,a.departamento ,a.documento,a.ciudad, a.apellidos,a.nombres, a.telefono_1, a.tipo_identificacion,a.direccion_residencia , a.e_mail FROM tmp_carga GROUP BY a.departamento ,a.documento,a.ciudad, a.apellidos,a.nombres, a.telefono_1, a.tipo_identificacion,a.direccion_residencia , a.e_mail RETURNING id,documento ), insertadetalle AS ( INSERT INTO detalle( codigooficina, direccionoficina, franquicia, montodisponible, nombreproducto, tipoproducto, ultimosdigitos, maestro_id) SELECT a.Codigo_Interno, a.Cod_Oficina,a.DireccionOficina,a.Franquicia_tarjeta, a.MontoDisponible, a.Nombre_Producto,a.Tipo_Producto,a.ultimos_digitos_tc,b.id FROM vys.tmp_carga as a JOIN base as b on a.documento=b.documento RETURNING maestro_id ) INSERT INTO marcadortelefonia ( numerointento, telefono, telefono2, telefono3, telefono4, fechacreacion, maestro_id, calificacion ) SELECT 1, a.telefono1, a.telefono2, a.telefono3, a.telefono4, current_timestamp, a.id, 0 FROM maestro as a JOIN base as b --tambien probe sustituyendo base por insertadetalle y tampoco ON a.id=b.id El tema es que no ejecuta el ultimo INSERT (sobre marcadortelefonia): si inserta los datos en maestro y en detalle, pero cuando consulto sobre marcadortelefonia no hay nada y tampoco genera error. En resumen, no sirve emplear un WITH con mas de dos sentencias DML.? o estoy haciendo algo mal? de antemano muchas gracias lista Cordialmente, Ing. Hellmuth I. Vargas S.