Re: Ayuda en consulta complicada

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

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

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2006-01-20 18:08:44 Re: [ADMIN] Postgres, logs, dumps y bases de datos descentralizadas.¿?
Previous Message Yessica Brinkmann 2006-01-20 17:47:14 Postgres, logs, dumps y bases de datos descentralizadas.¿?