| 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: | Whole Thread | Raw Message | 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
| 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) |