Re: Ayuda en consulta complicada

From: Luis Guevara <luis(dot)a(dot)guevara(at)gmail(dot)com>
To: Jaime Casanova <systemguards(at)gmail(dot)com>
Cc: PostgreSQL-foro <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Ayuda en consulta complicada
Date: 2006-01-20 21:30:25
Message-ID: fa2b6e3a0601201330l40d76512g@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Ok. Jaime he probado tal como indicas y funciona.

Pero no era lo que habia pedido, yo necesitaba que a partir de un id que se
envie como parámetro obtener todos los que dependen de este id (es decir
todos sus hijos) y no DE QUIEN DEPENDE o de donde procede ese ID.

Pero de todas maneras muchas gracias especialmente a Jaime y Alvaro.

La función que me brindarón me sirvió mucho para aprender y sacar otras
ideas.

Finalmente, despues de tanto probar he logrado desarrollar la función que
quería. Espero que le pueda servir a alguién. Ha quedado así:

CREATE OR REPLACE FUNCTION "public"."test2" (integer) RETURNS SETOF
"public"."dependencia" AS
$body$
declare
tabla dependencia%ROWTYPE;
begin
select into tabla depe_id from dependencia where depe_id = $1;
if not found then
return;
end if;
return next tabla;

for tabla in select depe_id from dependencia where depe_depeid = $1
loop
for tabla in select depe_id
from test2(tabla.depe_id) loop
return next tabla;
end loop;
end loop;
end
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
Aun me quedan algunas dudas en cuanto a RECORD y %ROWTYPE y he tenido que
hacerlo con el último para que funcione porque ya no tengo tiempo en estos
momentos para seguir probando.

Gracias a todos.

El día 20/01/06, Jaime Casanova <systemguards(at)gmail(dot)com> escribió:
>
> On 1/20/06, Luis Guevara <luis(dot)a(dot)guevara(at)gmail(dot)com> wrote:
> > Si esos son los campos, con toda seguridad, el problema es que me
> devuelve
> > este error:
> >
> > ERROR: wrong record type supplied in RETURN NEXT
> > CONTEXT: PL/pgSQL function "test" line 12 at return next
> >
>
> * crea una tabla dependencia con la siguiente estructura...
>
> pruebas=# \d dependencia
> Tabla «public.dependencia»
> Columna | Tipo | Modificadores
> -------------+---------+---------------
> depe_id | integer |
> depe_nombre | text |
> depe_depeid | integer |
>
>
> * copie, pegue y compile la funcion tal como la mostraste en el mail
> anterior...
>
> CREATE OR REPLACE FUNCTION "public"."test" (integer) RETURNS SETOF
> "public"."dependencia" AS
> $body$
> declare
> foo record;
> begin
> select into foo depe_id, depe_nombre, depe_depeid
> from dependencia
> where depe_id = $1;
> if not found then
> return;
> end if;
>
> return next foo;
>
> if foo.depe_depeid is not null then
> for foo in select depe_id, depe_nombre, depe_depeid
> from test(foo.depe_depeid ) loop
> return next foo;
> end loop;
> end if;
>
> return;
> end
> $body$
> LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
>
> * ejecute el select de esta forma
>
> pruebas=# select * from test(5);
> depe_id | depe_nombre | depe_depeid
> ---------+-------------+-------------
> 5 | zzzzz | 4
> 4 | yyyyy | 2
> 2 | bbbbb |
> (3 filas)
>
>
> no veo el problema, que version de postgres tienes?
>
>
> > Ojo que lo que deseo es obtener una lista de todos los registros que
> > dependen de una dependencia. Entonces
>
> Para eso es el SETOF que incluyo Alvaro en la definicion de la funcion
>
> > el resultado debe ser un grupo de registros y no un solo registro. Por
> eso
> > no entiendo porque en la funcion se ha puesto que devuelva un tipo de
> dato
> > RECORD, si ese tipo de dato, tengo entendido que solo devuelve una fila.
>
> >
>
> no devuelve RECORD, devuelve SETOF RECORD
>
> ademas el tipo de dato no es el que devuelve algo, es la funcion la
> que devuelve valores y por lo tanto es a la funcion a la que hay que
> indicarle que debe regresar varios registros de ese tipo de datos...
>
>
> --
> Atentamente,
> Jaime Casanova
> (DBA: DataBase Aniquilator ;)
>

--
atte.
Luis Guevara

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Julio Cesar Culebro Gonzalez 2006-01-20 21:32:33 Re: postgresql 8 1x con crystal reports 7 pro.
Previous Message Christian Sengstock 2006-01-20 20:43:03 Re: Postgres, logs, dumps y bases de datos descentralizadas.¿?