Re: problema de novato con cursores

From: "Milton Galo Patricio Inostroza Aguilera" <minoztro(at)gmail(dot)com>
To: "fernando gamba" <gamba(dot)fernando(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: problema de novato con cursores
Date: 2007-06-14 03:45:15
Message-ID: 172699c50706132045y15f4e166uab0b196a542c1b8f@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El 13/06/07, fernando gamba <gamba(dot)fernando(at)gmail(dot)com> escribió:
> hola a todos muy bueno el sitio, felicitaciones...
>
> mi problema es el siguiente: deseo sincronizar dos tablas iguales de
> dos DB diferentes , una es sucursal y la otra casa central. Para
> ello, me valgo de una columna tipo timestamp en cada tabla, el
> algoritmo seria:
> recorro la tabla a actualizar (tito en el ejemplo), busco ultima fecha
> de actualizacion (columna "creada"), recorro tabla de casa central que
> tiene las actualizaciones (pepe en el ejemplo) y busco aquellas filas
> que tienen columna "creada" mayor que la que recupere de la tabla
> tito, cargo un cursor, y luego voy haciendo insert o updates segun
> corresponda en la tabla tito
>
> Aca esta el codigo:
> (las tablas pepe y tito tienen la misma estructura)
> DECLARE
> ....
> Desde timestamp;
> curpepe refcursor;
> regpepe pepe%ROWTYPE;
> ....
> BEGIN
> ...
> Desde:= select into Desde COALESCE(max(creada),0) from tito;
>
> contador:=0;
> OPEN curpepe FOR
> SELECT * FROM pepe WHERE creada > Desde;
> LOOP
> FETCH curpepe INTO regpepe;
> IF (EXISTS (SELECT idtito FROM tito WHERE idtito = regpepe.idpepe))
> THEN

aca puedes hacer un RAISE NOTICE '%',regpepe.idpepe;

Para ver si ese valor es nulo o no

> UPDATE tito
> SET nombre = regpepe.nombre,
> creada = regpepe.creada
> WHERE idtito = regpepe.idpepe;
> ELSE
> INSERT INTO tito(idtito, nombre, creada)
> VALUES (regpepe.idpepe, regpepe.nombre, regpepe.creada);
> END IF;
> --EXIT WHEN NOT FOUND;
> contador := contador + 1;
> RAISE NOTICE 'contador %', contador;
> END LOOP;
> CLOSE curpepe;
>
>
> el problema es que el ultimo renglon que trata de insertar es nulo,
> pero no veo donde esta la falla, paso el log:
> ERROR: null value in column "idtito" violates not-null constraint
> CONTEXT: SQL statement "INSERT INTO tito(idtito, nombre, creada)
> VALUES ( $1 , $2 , $3 )"
>
> desde ya muchas gracias por cualquier ayuda y espero haber sido claro
> con la exposicion del problema
> --
> ---------------------------(fin del mensaje)---------------------------
> TIP 5: ¿Has leído nuestro extenso FAQ?
> http://www.postgresql.org/files/documentation/faqs/FAQ.html
>

--
Milton Inostroza Aguilera

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Julio Cesar Sánchez González 2007-06-14 04:02:31 Re: Levantar CLUSTER inicializado con INITDB (windows)
Previous Message Alvaro Herrera 2007-06-14 01:16:10 Re: Levantar CLUSTER inicializado con INITDB (windows)