Re: Formato de devolución de funciones

Lists: pgsql-es-ayuda
From: "M C" <ayudapostgre(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Formato de devolución de funciones
Date: 2009-01-14 15:04:59
Message-ID: 45a878710901140704j542fc3d8j59fa63e70058d72c@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Un saludo a todos,

Si ejecuto una funcion que devuelve un conjunto de valores (SETOF record)
los mismo vienen en el siguiente formato (xx,ddd,8,"cccc") para cada fila,
necesito que esos valores esten expresados en forma de arreglo similar al
resultado que obtengo si extraigo el query de la función y lo ejecuto por
consola. Esto es posible?

Gracias


From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: M C <ayudapostgre(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Formato de devolución de funciones
Date: 2009-01-14 15:22:57
Message-ID: 20090114152257.GI24156@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

M C escribió:

> Si ejecuto una funcion que devuelve un conjunto de valores (SETOF record)
> los mismo vienen en el siguiente formato (xx,ddd,8,"cccc") para cada fila,
> necesito que esos valores esten expresados en forma de arreglo similar al
> resultado que obtengo si extraigo el query de la función y lo ejecuto por
> consola. Esto es posible?

select * from function();

--
Alvaro Herrera http://www.PlanetPostgreSQL.org/
Voy a acabar con todos los humanos / con los humanos yo acabaré
voy a acabar con todos / con todos los humanos acabaré (Bender)


From: "M C" <ayudapostgre(at)gmail(dot)com>
To: "Alvaro Herrera" <alvherre(at)alvh(dot)no-ip(dot)org>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Formato de devolución de funciones
Date: 2009-01-14 15:50:07
Message-ID: 45a878710901140750s5b1a5179t8b5c53ab390e87cb@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Creo que no me explique. Desde mi aplicación llamo a una función hecha en
postgre y cuando hago un print_r del resultado me muestra esto:
Array ( [0] => Array ( [consultar_datosgrales] => (26,orororo,2,"sfew ewr
wer",ddd) ) [1] => Array ( [consultar_datosgrales_pantalla] => (25,"Titulo
de la pagina",1,"qwe qwerq rq qwrq wrqwr qwr rqwr qw",ddddd) ))

Si en lugar de llamar a la función envio el query directamente desde la
aplicación (el mismo query de la función anterior) y hago de nuevo un
print_r el resultado es el siguiente:

Array ( [0] => Array ( [id] => 26 [titulo] => orororo [pag] => 2
[descripcion] => sfew ewr wer [url] => ddd) [1] => Array ( [id] => 25
[titulo] => Titulo de la pagina [pag] => 1 [descripcion] => qwe qwerq rq
qwrq wrqwr qwr rqwr qw [url] => ddddd))

Es posible que al mandar a ejecutar la función desde la aplicación el
resultado sea como cuando envio el query directamente?


From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: M C <ayudapostgre(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Formato de devolución de funciones
Date: 2009-01-14 15:53:48
Message-ID: 20090114155348.GJ24156@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

M C escribió:
> Creo que no me explique. Desde mi aplicación llamo a una función hecha en
> postgre y cuando hago un print_r del resultado me muestra esto:
> Array ( [0] => Array ( [consultar_datosgrales] => (26,orororo,2,"sfew ewr
> wer",ddd) ) [1] => Array ( [consultar_datosgrales_pantalla] => (25,"Titulo
> de la pagina",1,"qwe qwerq rq qwrq wrqwr qwr rqwr qw",ddddd) ))
>
> Si en lugar de llamar a la función envio el query directamente desde la
> aplicación (el mismo query de la función anterior) y hago de nuevo un
> print_r el resultado es el siguiente:
>
> Array ( [0] => Array ( [id] => 26 [titulo] => orororo [pag] => 2
> [descripcion] => sfew ewr wer [url] => ddd) [1] => Array ( [id] => 25
> [titulo] => Titulo de la pagina [pag] => 1 [descripcion] => qwe qwerq rq
> qwrq wrqwr qwr rqwr qw [url] => ddddd))
>
> Es posible que al mandar a ejecutar la función desde la aplicación el
> resultado sea como cuando envio el query directamente?

Muestra por favor la función y cómo la estás invocando.

--
Alvaro Herrera http://www.amazon.com/gp/registry/3BP7BYG9PUGI8
"I am amazed at [the pgsql-sql] mailing list for the wonderful support, and
lack of hesitasion in answering a lost soul's question, I just wished the rest
of the mailing list could be like this." (Fotis)
(http://archives.postgresql.org/pgsql-sql/2006-06/msg00265.php)


From: Emanuel Calvo Franco <postgres(dot)arg(at)gmail(dot)com>
To: pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: [pgsql-es-ayuda] Formato de devolución de funciones
Date: 2009-01-14 15:54:38
Message-ID: f205bb120901140754s1c6c9ee4h8f3b51b4b8aa54ca@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

El día 14 de enero de 2009 13:50, M C <ayudapostgre(at)gmail(dot)com> escribió:
> Creo que no me explique. Desde mi aplicación llamo a una función hecha en
> postgre y cuando hago un print_r del resultado me muestra esto:
> Array ( [0] => Array ( [consultar_datosgrales] => (26,orororo,2,"sfew ewr
> wer",ddd) ) [1] => Array ( [consultar_datosgrales_pantalla] => (25,"Titulo
> de la pagina",1,"qwe qwerq rq qwrq wrqwr qwr rqwr qw",ddddd) ))
> Si en lugar de llamar a la función envio el query directamente desde la
> aplicación (el mismo query de la función anterior) y hago de nuevo un
> print_r el resultado es el siguiente:
>
> Array ( [0] => Array ( [id] => 26 [titulo] => orororo [pag] => 2
> [descripcion] => sfew ewr wer [url] => ddd) [1] => Array ( [id] => 25
> [titulo] => Titulo de la pagina [pag] => 1 [descripcion] => qwe qwerq rq
> qwrq wrqwr qwr rqwr qw [url] => ddddd))
>
> Es posible que al mandar a ejecutar la función desde la aplicación el
> resultado sea como cuando envio el query directamente?
>

No porque cada lenguaje tiene un formato de array distinto...

Este formato es el de PHP seguramente.

lo que si podes hacer es una funcion que retorne un texto de acuerdo a
los valores...
pero desconozco si hay algun proyecto de alguien que ya haga esto...

--
Emanuel Calvo Franco
ArPUG / AOSUG Member
Postgresql Support & Admin


From: "M C" <ayudapostgre(at)gmail(dot)com>
To: "Alvaro Herrera" <alvherre(at)alvh(dot)no-ip(dot)org>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Formato de devolución de funciones
Date: 2009-01-14 17:47:58
Message-ID: 45a878710901140947y210a5283ud653249722d25532@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

La función es la siguiente:

CREATE OR REPLACE FUNCTION consultar_datosgrales()
RETURNS SETOF record AS
$BODY$
SELECT id, titulo, pag, descripcion, url FROM pantalla;
$BODY$
LANGUAGE 'sql' IMMUTABLE;
ALTER FUNCTION consultar_datosgrales() OWNER TO postgre;
Cuando la invoco coloco SELECT consultar_datosgrales();


From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: M C <ayudapostgre(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Formato de devolución de funciones
Date: 2009-01-14 18:41:24
Message-ID: 20090114184124.GL24156@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

M C escribió:
> La función es la siguiente:
>
> CREATE OR REPLACE FUNCTION consultar_datosgrales()
> RETURNS SETOF record AS
> $BODY$
> SELECT id, titulo, pag, descripcion, url FROM pantalla;
> $BODY$
> LANGUAGE 'sql' IMMUTABLE;
> ALTER FUNCTION consultar_datosgrales() OWNER TO postgre;
> Cuando la invoco coloco SELECT consultar_datosgrales();

¿Y probaste con
select * from consultar_datosgrales()
como te dije en la primera respuesta?

--
Alvaro Herrera http://www.flickr.com/photos/alvherre/
"I can't go to a restaurant and order food because I keep looking at the
fonts on the menu. Five minutes later I realize that it's also talking
about food" (Donald Knuth)


From: "M C" <ayudapostgre(at)gmail(dot)com>
To: "Alvaro Herrera" <alvherre(at)alvh(dot)no-ip(dot)org>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Formato de devolución de funciones
Date: 2009-01-14 18:58:52
Message-ID: 45a878710901141058r1f06f512k17a12f20d14d7136@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Probe y me da el siguiente error:

ERROR: a column definition list is required for functions returning "record"


From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: M C <ayudapostgre(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Formato de devolución de funciones
Date: 2009-01-14 19:05:48
Message-ID: 20090114190548.GM24156@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

M C escribió:
> Probe y me da el siguiente error:
>
> ERROR: a column definition list is required for functions returning "record"

Entonces dale la definicion:

select * from funcion(id int, titulo text, pag int, description text, url text);

--
Alvaro Herrera http://www.advogato.org/person/alvherre
"Y eso te lo doy firmado con mis lágrimas" (Fiebre del Loco)


From: "M C" <ayudapostgre(at)gmail(dot)com>
To: "Alvaro Herrera" <alvherre(at)alvh(dot)no-ip(dot)org>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Formato de devolución de funciones
Date: 2009-01-14 19:27:10
Message-ID: 45a878710901141127o63210debs44721405c5e3b2fa@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

La función no recibe parametros


From: "Julio Cesar Rodriguez Dominguez" <jurasec(at)gmail(dot)com>
To: "M C" <ayudapostgre(at)gmail(dot)com>
Cc: "Alvaro Herrera" <alvherre(at)alvh(dot)no-ip(dot)org>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Formato de devolución de funciones
Date: 2009-01-14 19:35:46
Message-ID: 925902880901141135p763b57ehd1eaae48a7cc8ee1@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

2009/1/14 M C <ayudapostgre(at)gmail(dot)com>

> La función no recibe parametros

select * from funcion( ) as (id int, titulo text, pag int, description
text, url text);


From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: M C <ayudapostgre(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Formato de devolución de funciones
Date: 2009-01-14 19:52:16
Message-ID: 20090114195216.GN24156@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

M C escribió:
> La función no recibe parametros

No son parámetros. Es la declaración del tipo de retorno.

--
Alvaro Herrera http://www.amazon.com/gp/registry/3BP7BYG9PUGI8
"That sort of implies that there are Emacs keystrokes which aren't obscure.
I've been using it daily for 2 years now and have yet to discover any key
sequence which makes any sense." (Paul Thomas)


From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Julio Cesar Rodriguez Dominguez <jurasec(at)gmail(dot)com>
Cc: M C <ayudapostgre(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Formato de devolución de funciones
Date: 2009-01-14 19:53:00
Message-ID: 20090114195300.GO24156@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Julio Cesar Rodriguez Dominguez escribió:
> 2009/1/14 M C <ayudapostgre(at)gmail(dot)com>
>
> > La función no recibe parametros
>
> select * from funcion( ) as (id int, titulo text, pag int, description
> text, url text);

Esta es la forma correcta (ahora veo que me equivoqué antes).

--
Alvaro Herrera http://www.amazon.com/gp/registry/5ZYLFMCVHXC
"No deja de ser humillante para una persona de ingenio saber
que no hay tonto que no le pueda enseñar algo." (Jean B. Say)


From: "M C" <ayudapostgre(at)gmail(dot)com>
To: "Alvaro Herrera" <alvherre(at)alvh(dot)no-ip(dot)org>
Cc: "Julio Cesar Rodriguez Dominguez" <jurasec(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Formato de devolución de funciones
Date: 2009-01-15 15:00:55
Message-ID: 45a878710901150700w706e74edu36065af0b1fb9a98@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Lo intente de esa forma y me da el siguiente error:

ERROR: syntax error at or near "("

refieriendose al parentesis luego del AS

2009/1/14 Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>

> Julio Cesar Rodriguez Dominguez escribió:
> > 2009/1/14 M C <ayudapostgre(at)gmail(dot)com>
> >
> > > La función no recibe parametros
> >
> > select * from funcion( ) as (id int, titulo text, pag int, description
> > text, url text);
>
> Esta es la forma correcta (ahora veo que me equivoqué antes).
>
> --
> Alvaro Herrera
> http://www.amazon.com/gp/registry/5ZYLFMCVHXC
> "No deja de ser humillante para una persona de ingenio saber
> que no hay tonto que no le pueda enseñar algo." (Jean B. Say)
>


From: "Julio Cesar Rodriguez Dominguez" <jurasec(at)gmail(dot)com>
To: "M C" <ayudapostgre(at)gmail(dot)com>
Cc: "Alvaro Herrera" <alvherre(at)alvh(dot)no-ip(dot)org>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Formato de devolución de funciones
Date: 2009-01-15 15:44:06
Message-ID: 925902880901150744jcff7c80r87769ab936c02747@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

>
> Lo intente de esa forma y me da el siguiente error:
>
> ERROR: syntax error at or near "("
>
> refieriendose al parentesis luego del AS
>
>
No me di cuenta de que tu función estaba en sql, te dejo como hacerlo con
plpgsql:

create or repplace function consultar_datosgrales() returns setof record as
$BODY$
declare
rec record;
begin
for rec in SELECT* FROM clientes loop
return next rec;
end loop;
return;
end;
$BODY$
LANGUAGE 'plpgsql' IMMUTABLE;

y para llamarlo desde tu aplicación seria:

postgres(at)test[localhost]=# select * from consultar_datosgrales( ) as
(idcliente int,nombre text, appaterno text, apmaterno text);
idcliente | nombre | appaterno | apmaterno
-----------+--------+-----------+-----------
1 | Diego | Juarez | Pérez
2 | Ana | Zavala | Torres
3 | Jose | Matias | López
4 | César | Rios | Ocaña
5 | Luis | Ramos | Citalan
6 | Miguel | Estrada | Barrios
7 | a | b | c
(7 filas)


From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: M C <ayudapostgre(at)gmail(dot)com>
Cc: Julio Cesar Rodriguez Dominguez <jurasec(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Formato de devolución de funciones
Date: 2009-01-15 16:06:43
Message-ID: 20090115160643.GB6440@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

M C escribió:
> Lo intente de esa forma y me da el siguiente error:
>
> ERROR: syntax error at or near "("
>
> refieriendose al parentesis luego del AS

¿Estas usando una versión antideluviana de Postgres?

--
Alvaro Herrera http://www.amazon.com/gp/registry/3BP7BYG9PUGI8
Y una voz del caos me habló y me dijo
"Sonríe y sé feliz, podría ser peor".
Y sonreí. Y fui feliz.
Y fue peor.


From: "M C" <ayudapostgre(at)gmail(dot)com>
To: "Julio Cesar Rodriguez Dominguez" <jurasec(at)gmail(dot)com>
Cc: "Alvaro Herrera" <alvherre(at)alvh(dot)no-ip(dot)org>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Formato de devolución de funciones
Date: 2009-01-15 16:28:16
Message-ID: 45a878710901150828m147b497yef039a28322375f5@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Ahora si funciona, gracias :-D .... pero con sql simple tambien lo hace solo
que yo lo estaba llamando a la función sin colocar el * from por eso el
error, disculpa, me di cuenta despues de probar con la que forma que me
escribiste usando plpgsql.

Gracias :-)