Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Problemas para terminar una función PL/Pgsql

From: dculotta(at)fibertel(dot)com(dot)ar
To: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Problemas para terminar una función PL/Pgsql
Date: 2007-01-12 20:45:59
Message-ID: 7af38b8d4af4.45a7c957@fibertel.com.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

----- Mensaje original -----
De: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
Fecha: Viernes, Enero 12, 2007 5:23 pm
Asunto: Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Problemas para terminar una función PL/Pgsql

> dculotta(at)fibertel(dot)com(dot)ar escribió:
> > > dculotta(at)fibertel(dot)com(dot)ar escribió:
> > >
> > > > Mi problema es que, en teoría, logro armar el string sql como
> > > corresponde, pero hago agua al momento de ejecutarlo.
> > >
> > > Usa EXECUTE, no PERFORM.
> >
> > Lo he probado, de hecho, acabo de reintentarlo.
> > La función trabaja correctamente en todas sus partes, salvo en la
> de actualizar.
>
> Quizas el WHERE del UPDATE no esta bien construido ...
>
> > Me da la sensación que no ejecuta el query. ¿Alguna recomendación
> para depurar e ir viendo lo que sucede?
>
> Puedes usar RAISE NOTICE '%', sqlstr
> para mostrar la sentencia que se ejecutaria.
>
> > ¿Tengo algún error en algún lado en la función?.
>
> No tengo idea :-)
>
> --
> Alvaro Herrera
> http://www.CommandPrompt.com/The PostgreSQL Company - Command
> Prompt, Inc.
>
> ---------------------------(fin del mensaje)------------------------
> ---
> TIP 10: visita nuestro canal de IRC #postgresql-es en irc.freenode.net
>

He puesto los RAISE NOTICE:

DROP FUNCTION updatedatos();
CREATE OR REPLACE FUNCTION updatedatos()
RETURNS text AS
$BODY$
DECLARE
myrows RECORD;
thisrow RECORD;
thiscolumn RECORD;
flag INTEGER;
strcond VARCHAR;
strsql VARCHAR;
paso1 INTEGER;
BEGIN
FOR myrows IN SELECT * FROM datosorigen LOOP
/* No hay EAN para poder cruzar informacion */
IF myrows.usuario IS NULL THEN
flag = 0;
ELSE
/* Hay registro */
SELECT INTO thisrow * FROM datosusuarios WHERE usuario = myrows.usuario;
IF thisrow.usuario IS NULL THEN
/* No está en la tabla, se insertan todos los campos */
BEGIN
insert into datosusuarios values (myrows.usuario,myrows.apellido,myrows.nombre);
EXCEPTION
WHEN RAISE_EXCEPTION THEN
flag = 5;
RETURN flag;
END;
ELSE
strcond = NULL;
IF myrows.apellido IS NOT NULL THEN
IF strcond IS NOT NULL THEN
strcond := strcond || ',';
END IF;
strcond := strcond || 'apellido = myrows.apellido';
paso1 = 1;
END IF;
RAISE NOTICE '%', strcond;
IF myrows.nombre IS NOT NULL THEN
IF strcond IS NOT NULL THEN
strcond := strcond || ',';
END IF;
strcond := strcond || 'nombre = myrows.nombre';
paso1 = paso1 + 1;
END IF;
RAISE NOTICE '%', strcond;
IF strcond IS NOT NULL THEN
strsql := 'update datosusuarios set ' || strcond || ' where usuario = myrows.usuario';
RAISE NOTICE '%', sqlstr;
BEGIN
EXECUTE strsql;
paso1 = paso1 + 1;
EXCEPTION
WHEN RAISE_EXCEPTION THEN
flag = 6;
RETURN flag;
END;
END IF;
END IF;
flag = 1;
END IF;
END LOOP;
/* delete from partyupdate; */
RETURN paso1;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;

Me devuelve la variable strcond nula.
:-(

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2007-01-12 20:56:11 Re: Re: [pgsql-es-ayuda] Problemas para terminar una función PL/Pgsql
Previous Message Cristian Saavedra 2007-01-12 20:40:19 Re: ayuda con planeador