Re: problema de novato con cursores

From: José Ruiz aguilera <farfaconda(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-13 19:14:07
Message-ID: ad88fc5e0706131214v1edd2793m8a9b65cb207ea97c@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

el problema que veo es que cuando haces la inserción, se queja de que, en la
tabla pepe, la columna idtito no puede contener nulos, ya sea por haberse
definido como NOT NULL o porque forme parte de la clave primaria de la
tabla.

El día 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
> 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
>

--
Atte. José Ruiz Aguilera.

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Ernesto Esteban del Campo Cárcamo 2007-06-13 19:53:01 Cae postgres de forma inesperada
Previous Message Alvaro Herrera 2007-06-13 16:12:19 Re: Funciones C