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

From: Raúl Andrés Duque <raulandresduque(at)hotmail(dot)com>
To: "Damian Culotta" <dculotta(at)fibertel(dot)com(dot)ar>, "Jaime Casanova" <systemguards(at)gmail(dot)com>
Cc: <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-16 09:42:22
Message-ID: BAY135-DAV17DF16A89534DEF61E403FBAB40@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Damina qué es es "RETURN paso1"

Atentamente,

RAUL DUQUE
Bogotá, Colombia
----- Original Message -----
From: Damian Culotta
To: Jaime Casanova
Cc: 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;

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message javier foxparaguay 2007-01-16 09:52:36 Re: Tabla de nacionalidades
Previous Message Oswaldo Hernández 2007-01-16 09:16:13 Re: Tabla de nacionalidades