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

From: Damian Culotta <dculotta(at)fibertel(dot)com(dot)ar>
To: Raúl Andrés Duque <raulandresduque(at)hotmail(dot)com>
Cc: Jaime Casanova <systemguards(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Problemas para terminar una función PL/Pgsql
Date: 2007-01-17 03:02:15
Message-ID: 45AD91B7.2000702@fibertel.com.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Raúl Andrés Duque escribió:
> Damina qué es es "RETURN paso1"
>
> Atentamente,
>
> RAUL DUQUE
> Bogotá, Colombia
>
> ----- Original Message -----
> *From:* Damian Culotta <mailto:dculotta(at)fibertel(dot)com(dot)ar>
> *To:* Jaime Casanova <mailto:systemguards(at)gmail(dot)com>
> *Cc:* pgsql-es-ayuda(at)postgresql(dot)org
> <mailto:pgsql-es-ayuda(at)postgresql(dot)org>
> *Sent:* Monday, January 15, 2007 9:35 PM
> *Subject:* [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Re:
> [pgsql-es-ayuda] Problemas para terminar una función PL/Pgsql
>
> Jaime Casanova escribió:
>> On 1/12/07, Alvaro Herrera <alvherre(at)commandprompt(dot)com> wrote:
>>> dculotta(at)fibertel(dot)com(dot)ar escribió:
>>>
>>> >
>>> > Me devuelve la variable strcond nula.
>>> > :-(
>>>
>>> o inicializala a la cadena vacia antes de hacer las
>>> concatenaciones.
>>>
>>
>> esa es la solucion... el esta inicializando strcond a NULL y luego
>> cada vez que va a asignarle un valor hace strcond := strcond ||
>> 'alguna_cadena' lo cual, obviamente, le va a dejar nula esa variable
>>
> Ya lo solucioné, sólo quería postearlo por si a alguien le sirve
> el ejemplo.
> Muchas gracias por las colaboraciones.
> Aún em falta ver un par de pequeños detalles, pero ya es funcional.
>
> He aquí la función:
>
> CREATE OR REPLACE FUNCTION updatedatos()
> RETURNS text AS
> $BODY$
> DECLARE
> myrows RECORD;
> thisrow RECORD;
> strcond VARCHAR;
>
> flag INTEGER;
>
> BEGIN
> FOR myrows IN SELECT * FROM datosorigen LOOP
> IF myrows.usuario IS NULL THEN
> flag = 1;
> RETURN flag;
> ELSE
> SELECT INTO thisrow * FROM datosusuarios WHERE usuario = myrows.usuario;
> IF thisrow.usuario IS NULL THEN
> BEGIN
> insert into datosusuarios values
> (myrows.usuario,myrows.apellido,myrows.nombre);
> EXCEPTION
> WHEN RAISE_EXCEPTION THEN
> flag = 2;
> RETURN flag;
> END;
> ELSE
> strcond := '';
> IF myrows.apellido IS NOT NULL AND myrows.apellido <> thisrow.apellido THEN
> IF strcond <> '' THEN
> strcond := strcond || ',';
> END IF;
> strcond := strcond || 'apellido = ''' || myrows.apellido || '''';
> END IF;
> IF myrows.nombre IS NOT NULL AND myrows.nombre <> thisrow.nombre THEN
> IF strcond <> '' THEN
> strcond := strcond || ',';
> END IF;
> strcond := strcond || 'nombre = ''' || myrows.nombre || '''';
> END IF;
> IF strcond <> '' THEN
> BEGIN
> EXECUTE 'update datosusuarios set ' || strcond || ' where usuario = '''
> || myrows.usuario || '''';
> EXCEPTION
> WHEN RAISE_EXCEPTION THEN
> flag = 3;
> RETURN flag;
> END;
> END IF;
> END IF;
> flag = 0;
> END IF;
> END LOOP;
> /* delete from partyupdate; */
> RETURN paso1;
> END;
> $BODY$
> LANGUAGE 'plpgsql' VOLATILE;
>
>
Perdón, ahi se me escapó.
Era una variable que estaba usando para control.
Debería ser: RETURN flag para este caso. Flag estaba devolviendome en
que estado había quedado (probando con un registro, no sirve como
control real. (Al menos no así).

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alejandro Loayza 2007-01-17 05:41:45 entorno postgresql
Previous Message Marco Vinicio Jimenez Rojas 2007-01-17 02:39:23 Re: instalacion de postgreSQL