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;
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 |