No funciona WITH con mas de 2 sentencias DML

From: Hellmuth Vargas <hivs77(at)gmail(dot)com>
To: Lista Postgres ES <pgsql-es-ayuda(at)postgresql(dot)org>, "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>
Subject: No funciona WITH con mas de 2 sentencias DML
Date: 2015-10-06 15:30:48
Message-ID: CAN3Qy4qRvXsjTzXeR0H6XooWD5-uJr0Fz=TpbfCrCWq=RuAMXw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda pgsql-general

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.

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2015-10-06 15:51:23 Re: [pgsql-es-ayuda] No funciona WITH con mas de 2 sentencias DML
Previous Message Arcel Labrada Batista 2015-10-05 15:13:37 Re: [MASSMAIL]Re: insert eficiente

Browse pgsql-general by date

  From Date Subject
Next Message Basques, Bob (CI-StPaul) 2015-10-06 15:38:55 Re: Processing data from table using awk.
Previous Message John McKown 2015-10-06 15:10:02 Re: Processing data from table using awk.