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 ;)
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.¿? |