Windows Vista de 64 Bits: Conexión a Servidor Postgres via el ODBC

Lists: pgsql-es-ayuda
From: Gabriel Hermes Colina Zambra <hermeszambra(at)yahoo(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Diferencia 8.2 con 8.3 en parametro funcion sql, meno
Date: 2009-02-21 04:27:12
Message-ID: 702632.33226.qm@web63707.mail.re1.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Resulta que actualice a 8.3 y hubo dos funciones que tuve que tocar para
que siguieran funcionando.

Paso a explicar.

Asi es como quedo en 8.3

CREATE OR REPLACE FUNCTION "central"."fnc_buscocliente" (varchar) RETURNS SETOF "central"."clientes" AS
$body$
select * from central.clientes where id_cliente::varchar = $1 or ruc = $1
$body$
LANGUAGE 'sql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100 ROWS 1000;

Asi era

CREATE OR REPLACE FUNCTION "central"."fnc_buscocliente" (varchar) RETURNS SETOF "central"."clientes" AS
$body$
select * from central.clientes where id_cliente = $1 or ruc = $1
$body$
LANGUAGE 'sql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER;

Bueno, Ruc es varchar y id_cliente es integer, en 8.2 el parametro podia comparar el parametro varchar en id_cliente sin problemas, siendo esta permisividad muy comoda.

Personalmente creo que es mejor no ser permisivo, pero me lleve una sorpresa cuando mi aplicacion anunciaba un error en la busqueda y habia cambiado su comportamiento por que cambie el servidor.

A que otros cambios del estilo debo prestar atencion para adelantarme a problemas de migracion, donde puedo encontrar info al respecto.

Otra cosa COST 100 ROWS 1000, no es soportado por 8.2, o por lo menos no con el que uso en un cliente, pues genere una funcion en 8.3 y cuando copie el ddl y lo ejecute en 8.2, ups, tuve que ver por que no caminaba y esta era la causa.

Agradezco desde ya algun comentario sobre estos puntos, pues de momento estoy muy saturado y recurro al foro para actualizarme.

Gracias y disculpen las molestias

Atte.
Gabriel Colina

¡Sé el Bello 51 de People en Español! ¡Es tu oportunidad de Brillar! Sube tus fotos ya. http://www.51bello.com/


From: Jaime Casanova <jcasanov(at)systemguards(dot)com(dot)ec>
To: hermeszambra(at)yahoo(dot)com
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Diferencia 8.2 con 8.3 en parametro funcion sql, meno
Date: 2009-02-21 05:56:59
Message-ID: 3073cc9b0902202156v5de3b767u1d75d3aa195474d1@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

On Fri, Feb 20, 2009 at 11:27 PM, Gabriel Hermes Colina Zambra
<hermeszambra(at)yahoo(dot)com> wrote:
>
> Bueno, Ruc es varchar y id_cliente es integer, en 8.2 el parametro podia comparar el parametro varchar en id_cliente sin problemas, siendo esta permisividad muy comoda.
>

en 8.3 se eliminaron algunos casts implicitos

>
> Otra cosa COST 100 ROWS 1000, no es soportado por 8.2, o por lo menos no con el que uso en un cliente, pues genere una funcion en 8.3 y cuando copie el ddl y lo ejecute en 8.2, ups, tuve que ver por que no caminaba y esta era la causa.
>

COST Y ROWS fueron agregados en 8.3 para permitir darle al planeador
alguna idea de que esperar en cuanto a las funciones...

> Agradezco desde ya algun comentario sobre estos puntos
>

http://www.postgresql.org/docs/8.3/static/sql-createfunction.html
http://www.postgresql.org/docs/8.3/static/release-8-3.html

PS: esa funcion podrias declararla como STABLE
http://www.postgresql.org/docs/8.3/static/xfunc-volatility.html

--
Atentamente,
Jaime Casanova
Soporte y capacitación de PostgreSQL
Asesoría y desarrollo de sistemas
Guayaquil - Ecuador
Cel. +59387171157


From: Gabriel Hermes Colina Zambra <hermeszambra(at)yahoo(dot)com>
To: Jaime Casanova <jcasanov(at)systemguards(dot)com(dot)ec>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Diferencia 8.2 con 8.3 en parametro funcion sql, meno
Date: 2009-02-21 06:49:37
Message-ID: 990682.95403.qm@web63703.mail.re1.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

--- El sáb 21-feb-09, Jaime Casanova <jcasanov(at)systemguards(dot)com(dot)ec> escribió:

> De: Jaime Casanova <jcasanov(at)systemguards(dot)com(dot)ec>
> Asunto: Re: [pgsql-es-ayuda] Diferencia 8.2 con 8.3 en parametro funcion sql, meno
> A: hermeszambra(at)yahoo(dot)com
> Cc: pgsql-es-ayuda(at)postgresql(dot)org
> Fecha: sábado, 21 febrero, 2009, 2:56 am
> On Fri, Feb 20, 2009 at 11:27 PM, Gabriel Hermes Colina
> Zambra
> <hermeszambra(at)yahoo(dot)com> wrote:
> >
> > Bueno, Ruc es varchar y id_cliente es integer, en 8.2
> el parametro podia comparar el parametro varchar en
> id_cliente sin problemas, siendo esta permisividad muy
> comoda.
> >
>
> en 8.3 se eliminaron algunos casts implicitos
>
> >
> > Otra cosa COST 100 ROWS 1000, no es soportado por 8.2,
> o por lo menos no con el que uso en un cliente, pues genere
> una funcion en 8.3 y cuando copie el ddl y lo ejecute en
> 8.2, ups, tuve que ver por que no caminaba y esta era la
> causa.
> >
>
> COST Y ROWS fueron agregados en 8.3 para permitir darle al
> planeador
> alguna idea de que esperar en cuanto a las funciones...
>
> > Agradezco desde ya algun comentario sobre estos puntos
> >
>
> http://www.postgresql.org/docs/8.3/static/sql-createfunction.html
> http://www.postgresql.org/docs/8.3/static/release-8-3.html
>
> PS: esa funcion podrias declararla como STABLE
> http://www.postgresql.org/docs/8.3/static/xfunc-volatility.html
>
> --
> Atentamente,
> Jaime Casanova
> Soporte y capacitación de PostgreSQL
> Asesoría y desarrollo de sistemas
> Guayaquil - Ecuador
> Cel. +59387171157
> --
> TIP 5: ¿Has leído nuestro extenso FAQ?
> http://www.postgresql.org/docs/faqs.FAQ.html

Gracias Jaime muy clara la respuesta

Saludos
Gabriel

¡Sé el Bello 51 de People en Español! ¡Es tu oportunidad de Brillar! Sube tus fotos ya. http://www.51bello.com/


From: Rodriguez Fernando <rodriguez(at)ort(dot)edu(dot)uy>
To: hermeszambra(at)yahoo(dot)com
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Diferencia 8.2 con 8.3 en parametro funcion sql, meno
Date: 2009-02-23 10:18:49
Message-ID: 49A27809.3070902@ort.edu.uy
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Gabriel Hermes Colina Zambra escribió:
> Resulta que actualice a 8.3 y hubo dos funciones que tuve que tocar para
> que siguieran funcionando.
>
> Paso a explicar.
>
> Asi es como quedo en 8.3
>
> CREATE OR REPLACE FUNCTION "central"."fnc_buscocliente" (varchar) RETURNS SETOF "central"."clientes" AS
> $body$
> select * from central.clientes where id_cliente::varchar = $1 or ruc = $1
> $body$
> LANGUAGE 'sql'
> VOLATILE
> CALLED ON NULL INPUT
> SECURITY INVOKER
> COST 100 ROWS 1000;
>
> Asi era
>
> CREATE OR REPLACE FUNCTION "central"."fnc_buscocliente" (varchar) RETURNS SETOF "central"."clientes" AS
> $body$
> select * from central.clientes where id_cliente = $1 or ruc = $1
> $body$
> LANGUAGE 'sql'
> VOLATILE
> CALLED ON NULL INPUT
> SECURITY INVOKER;
>
> Bueno, Ruc es varchar y id_cliente es integer, en 8.2 el parametro podia comparar el parametro varchar en id_cliente sin problemas, siendo esta permisividad muy comoda.
>
> Personalmente creo que es mejor no ser permisivo, pero me lleve una sorpresa cuando mi aplicacion anunciaba un error en la busqueda y habia cambiado su comportamiento por que cambie el servidor.
>
> A que otros cambios del estilo debo prestar atencion para adelantarme a problemas de migracion, donde puedo encontrar info al respecto.
>
>
> Otra cosa COST 100 ROWS 1000, no es soportado por 8.2, o por lo menos no con el que uso en un cliente, pues genere una funcion en 8.3 y cuando copie el ddl y lo ejecute en 8.2, ups, tuve que ver por que no caminaba y esta era la causa.
>
> Agradezco desde ya algun comentario sobre estos puntos, pues de momento estoy muy saturado y recurro al foro para actualizarme.
>
> Gracias y disculpen las molestias
>
> Atte.
> Gabriel Colina
>
>
>
>
>
>
>
> ¡Sé el Bello 51 de People en Español! ¡Es tu oportunidad de Brillar! Sube tus fotos ya. http://www.51bello.com/
> --
> TIP 7: no olvides aumentar la configuración del "free space map"
>
Hola, en 8.3 ya no "castea", en forma automática de char a nro.

Saludos Fernando


From: "Conrado Blasetti" <conrado(at)mapfre(dot)com(dot)ar>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Function que retorna una tabla
Date: 2009-02-23 10:47:54
Message-ID: 76A99F19229DC440909CF1B905F8012C0790A5CA@sar001998.Mapfre.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Gente, buenos días.

Bueno, esto tema de seguro se habrá tocado, pero no logro dar con lo que necesito.
La function que necesito es la que devuelve valores en registros:

Dentro de ella quiero devolver N filas del tipo ej: codigo NUMERIC, descripción VARCHAR(30)

Pero esta devolución la hago loopeando una tabla y retornando valores a manos. La idea es joinearla en sql.

Ej:

Create or replace function test() returns ????? as
$$
Declare
C1 record;
Begin
For c1 in (select codigo, descripcion from tabla) loop
Return c1.codigo, c1.descripcion;
o
Return next c1.codigo, c1.descripcion;
--LEI POR AHÍ, QUE ESTO DEBO HACERLO CON WHILE Y NO CON FOR, PUEDE SER?
End loop;

--ACA QUIERO POR EJEMPLO, DEVOLVER VALORES A MANO
Return next 999, 'CODIGO MANUAL';

--ACA QUIERO LLAMAR A UNA FUNCION Y QUE ELLA DEVUELVA UN REGISTRO
--DEL MISMO TIPO
Return f_devolver_codigo_descripcion;
End;
$$ language 'plpgsql'

Lo ideal es poder hacer estas 3 cosas, en realidad, en la function tengo que hacer estas cosas.
Bueno, la verdad, no encuentro la forma de poder armar esta function y que pueda devolver registro y que a su vez la pueda joinear en una sentencia sql

Desde ya, muchas gracias.
Saludos,
Conrado


From: Calabaza <calalinux(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Function que retorna una tabla
Date: 2009-02-23 11:42:47
Message-ID: 958993320902230342o5acf876fn7d2a0668796d2fb5@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

El día 23 de febrero de 2009 7:47, Conrado Blasetti
<conrado(at)mapfre(dot)com(dot)ar> escribió:
> Gente, buenos días.
>
> Bueno, esto tema de seguro se habrá tocado,
> pero no logro dar con lo que necesito.
> La function que necesito es la que devuelve valores en registros:

> Dentro de ella quiero devolver N filas del tipo
> ej: codigo NUMERIC, descripción VARCHAR(30)

Puedes mirar la sección 38.7.3.5. Returning Cursors de esta pagina:
http://www.postgresql.org/docs/8.3/interactive/plpgsql-cursors.html

Y esta otra también...
http://www.postgresql.org/docs/8.3/interactive/sql-declare.html

> Pero esta devolución la hago loopeando una tabla
> y retornando valores a manos.

> La idea es joinearla en sql.

¿disculpa, pero no entiendo, Quieres hacer un join con el resultado?

>
> Ej:
>
>
> Create or replace function test() returns ????? as
> $$
> Declare
> C1 record;
> Begin
> For c1 in (select codigo, descripcion from tabla) loop
> Return c1.codigo, c1.descripcion;
> o
> Return next c1.codigo, c1.descripcion;
> --LEI POR AHÍ, QUE ESTO DEBO HACERLO CON WHILE Y NO CON FOR, PUEDE SER?
> End loop;
>
> --ACA QUIERO POR EJEMPLO, DEVOLVER VALORES A MANO
> Return next 999, 'CODIGO MANUAL';
>
> --ACA QUIERO LLAMAR A UNA FUNCION Y QUE ELLA DEVUELVA UN REGISTRO
> --DEL MISMO TIPO
> Return f_devolver_codigo_descripcion;
> End;
> $$ language 'plpgsql'

> Lo ideal es poder hacer estas 3 cosas, en realidad,
> en la function tengo que hacer estas cosas.

Bueno creo que puedes usar union para armar tu sql
que luego le pasaras a tu cursor para crearlo:

select 888 as codigo, 'lo que viene de la tabla' as descripcion
union
(Select 999 as codigo, 'CODIGO MANUAL' as descripcion)
union
(Select 777 as codigo, 'Lo que viene de la fucnion' as descripcion)

Puedes ver: http://www.postgresql.org/docs/8.3/interactive/queries-union.html

> Bueno, la verdad, no encuentro la forma de poder armar
> esta function y que pueda devolver registro

> y que a su vez la pueda joinear en una sentencia sql
esto de joinear sigo sin entenderlo todavía...

> Desde ya, muchas gracias.

Ok, Un abrazo...

> Saludos,
> Conrado
>
> --
> TIP 2: puedes desuscribirte de todas las listas simultáneamente
> (envía "unregister TuDirecciónDeCorreo" a majordomo(at)postgresql(dot)org)

--
§~^Calabaza^~§ from Villa Elisa, Paraguay


From: "Conrado Blasetti" <conrado(at)mapfre(dot)com(dot)ar>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Function que retorna una tabla
Date: 2009-02-23 11:49:34
Message-ID: 76A99F19229DC440909CF1B905F8012C0790A898@sar001998.Mapfre.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Gracias Calabaza, he visto el tema de los cursores, pero en realidad, está simplificado mi ejemplo... básicamente tengo que loopear una determinada tabla, manipular los datos de cada registros y luego hacer el return de ciertos datos _cocinados_. Otra cosa que necesito, es agregar returns con datos especificos o sea, return algo, algo.
Por otro lado, si, una vez que pueda hacer select * from my_funcion(), la necesito joinear con otras.

-----Mensaje original-----
De: pgsql-es-ayuda-owner(at)postgresql(dot)org [mailto:pgsql-es-ayuda-owner(at)postgresql(dot)org] En nombre de Calabaza
Enviado el: Lunes, 23 de Febrero de 2009 09:43 a.m.
Para: pgsql-es-ayuda(at)postgresql(dot)org
Asunto: Re: [pgsql-es-ayuda] Function que retorna una tabla

El día 23 de febrero de 2009 7:47, Conrado Blasetti
<conrado(at)mapfre(dot)com(dot)ar> escribió:
> Gente, buenos días.
>
> Bueno, esto tema de seguro se habrá tocado,
> pero no logro dar con lo que necesito.
> La function que necesito es la que devuelve valores en registros:

> Dentro de ella quiero devolver N filas del tipo
> ej: codigo NUMERIC, descripción VARCHAR(30)

Puedes mirar la sección 38.7.3.5. Returning Cursors de esta pagina:
http://www.postgresql.org/docs/8.3/interactive/plpgsql-cursors.html

Y esta otra también...
http://www.postgresql.org/docs/8.3/interactive/sql-declare.html

> Pero esta devolución la hago loopeando una tabla
> y retornando valores a manos.

> La idea es joinearla en sql.

¿disculpa, pero no entiendo, Quieres hacer un join con el resultado?

>
> Ej:
>
>
> Create or replace function test() returns ????? as
> $$
> Declare
> C1 record;
> Begin
> For c1 in (select codigo, descripcion from tabla) loop
> Return c1.codigo, c1.descripcion;
> o
> Return next c1.codigo, c1.descripcion;
> --LEI POR AHÍ, QUE ESTO DEBO HACERLO CON WHILE Y NO CON FOR, PUEDE SER?
> End loop;
>
> --ACA QUIERO POR EJEMPLO, DEVOLVER VALORES A MANO
> Return next 999, 'CODIGO MANUAL';
>
> --ACA QUIERO LLAMAR A UNA FUNCION Y QUE ELLA DEVUELVA UN REGISTRO
> --DEL MISMO TIPO
> Return f_devolver_codigo_descripcion;
> End;
> $$ language 'plpgsql'

> Lo ideal es poder hacer estas 3 cosas, en realidad,
> en la function tengo que hacer estas cosas.

Bueno creo que puedes usar union para armar tu sql
que luego le pasaras a tu cursor para crearlo:

select 888 as codigo, 'lo que viene de la tabla' as descripcion
union
(Select 999 as codigo, 'CODIGO MANUAL' as descripcion)
union
(Select 777 as codigo, 'Lo que viene de la fucnion' as descripcion)

Puedes ver: http://www.postgresql.org/docs/8.3/interactive/queries-union.html

> Bueno, la verdad, no encuentro la forma de poder armar
> esta function y que pueda devolver registro

> y que a su vez la pueda joinear en una sentencia sql
esto de joinear sigo sin entenderlo todavía...

> Desde ya, muchas gracias.

Ok, Un abrazo...

> Saludos,
> Conrado
>
> --
> TIP 2: puedes desuscribirte de todas las listas simultáneamente
> (envía "unregister TuDirecciónDeCorreo" a majordomo(at)postgresql(dot)org)

--
§~^Calabaza^~§ from Villa Elisa, Paraguay
--
TIP 8: explain analyze es tu amigo


From: Calabaza <calalinux(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Function que retorna una tabla
Date: 2009-02-23 12:47:08
Message-ID: 958993320902230447j19b2cd2fx2845c40a74025da1@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

El día 23 de febrero de 2009 8:49, Conrado Blasetti
<conrado(at)mapfre(dot)com(dot)ar> escribió:
> -----Mensaje original-----
> De: pgsql-es-ayuda-owner(at)postgresql(dot)org [mailto:pgsql-es-ayuda-owner(at)postgresql(dot)org] En nombre de Calabaza
> Enviado el: Lunes, 23 de Febrero de 2009 09:43 a.m.
> Para: pgsql-es-ayuda(at)postgresql(dot)org
> Asunto: Re: [pgsql-es-ayuda] Function que retorna una tabla
>
> El día 23 de febrero de 2009 7:47, Conrado Blasetti
> <conrado(at)mapfre(dot)com(dot)ar> escribió:
>> Gente, buenos días.
>>
>> Bueno, esto tema de seguro se habrá tocado,
>> pero no logro dar con lo que necesito.
>> La function que necesito es la que devuelve valores en registros:
>
>> Dentro de ella quiero devolver N filas del tipo
>> ej: codigo NUMERIC, descripción VARCHAR(30)
>
> Puedes mirar la sección 38.7.3.5. Returning Cursors de esta pagina:
> http://www.postgresql.org/docs/8.3/interactive/plpgsql-cursors.html
>
> Y esta otra también...
> http://www.postgresql.org/docs/8.3/interactive/sql-declare.html
>
>> Pero esta devolución la hago loopeando una tabla
>> y retornando valores a manos.
>
>> La idea es joinearla en sql.
>
> ¿disculpa, pero no entiendo, Quieres hacer un join con el resultado?
>
>>
>> Ej:
>>
>>
>> Create or replace function test() returns ????? as
>> $$
>> Declare
>> C1 record;
>> Begin
>> For c1 in (select codigo, descripcion from tabla) loop
>> Return c1.codigo, c1.descripcion;
>> o
>> Return next c1.codigo, c1.descripcion;
>> --LEI POR AHÍ, QUE ESTO DEBO HACERLO CON WHILE Y NO CON FOR, PUEDE SER?
>> End loop;
>>
>> --ACA QUIERO POR EJEMPLO, DEVOLVER VALORES A MANO
>> Return next 999, 'CODIGO MANUAL';
>>
>> --ACA QUIERO LLAMAR A UNA FUNCION Y QUE ELLA DEVUELVA UN REGISTRO
>> --DEL MISMO TIPO
>> Return f_devolver_codigo_descripcion;
>> End;
>> $$ language 'plpgsql'
>
>> Lo ideal es poder hacer estas 3 cosas, en realidad,
>> en la function tengo que hacer estas cosas.
>
> Bueno creo que puedes usar union para armar tu sql
> que luego le pasaras a tu cursor para crearlo:
>
> select 888 as codigo, 'lo que viene de la tabla' as descripcion
> union
> (Select 999 as codigo, 'CODIGO MANUAL' as descripcion)
> union
> (Select 777 as codigo, 'Lo que viene de la fucnion' as descripcion)
>
> Puedes ver: http://www.postgresql.org/docs/8.3/interactive/queries-union.html
>
>> Bueno, la verdad, no encuentro la forma de poder armar
>> esta function y que pueda devolver registro
>
>> y que a su vez la pueda joinear en una sentencia sql
> esto de joinear sigo sin entenderlo todavía...
>
>> Desde ya, muchas gracias.
>
> Ok, Un abrazo...
>
>> Saludos,
>> Conrado
>>
>> --
>> TIP 2: puedes desuscribirte de todas las listas simultáneamente
>> (envía "unregister TuDirecciónDeCorreo" a majordomo(at)postgresql(dot)org)
>
> --
> §~^Calabaza^~§ from Villa Elisa, Paraguay
> --
> TIP 8: explain analyze es tu amigo
> --
> TIP 9: visita nuestro canal de IRC #postgresql-es en irc.freenode.net
>

> Gracias Calabaza, he visto el tema de los cursores,
> pero en realidad, está simplificado mi ejemplo...

1er Problema:
> básicamente tengo que loopear una determinada tabla,
> manipular los datos de cada registros y luego
> hacer el return de ciertos datos _cocinados_.

2do Problema:
> Otra cosa que necesito, es agregar returns con datos
> especificos o sea, return algo, algo.

3er Problema:
> Por otro lado, si, una vez que pueda hacer
> select * from my_funcion(), la necesito joinear con otras.

Bueno según lo que dices tienes 3 problemas, me parece mejor,
salvo mejor parecer de algun compañero de la lista, para los casos 1 y
2, hacerlo en funciones separadas, y unificar el resultado desde el
lado del cliente.

Y para el tercer caso, apenas tenga un tiempito
hago mis pruebas y te cuento..

Un Abrazo.
--
§~^Calabaza^~§ from Villa Elisa, Paraguay


From: "Conrado Blasetti" <conrado(at)mapfre(dot)com(dot)ar>
To: "Calabaza" <calalinux(at)gmail(dot)com>, <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Function que retorna una tabla
Date: 2009-02-23 12:58:49
Message-ID: 76A99F19229DC440909CF1B905F8012C0790AC89@sar001998.Mapfre.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Calabaza, gracias. Si, tengo alternativas, y quise optar por la prioridad

SQL
PL
DESDE EL CLIENTE

Pero creo que desde PL debería poder hacerlo, lo que pasa es que necesito encapsularlo todo en la misma funcion, no se si será mejor, pero quiero rumbear para ese lado

Igual, tenida en cuenta la recomendación, reformularé mis puntos a resolver.

Gracias

-----Mensaje original-----
De: pgsql-es-ayuda-owner(at)postgresql(dot)org [mailto:pgsql-es-ayuda-owner(at)postgresql(dot)org] En nombre de Calabaza
Enviado el: Lunes, 23 de Febrero de 2009 10:47 a.m.
Para: pgsql-es-ayuda(at)postgresql(dot)org
Asunto: Re: [pgsql-es-ayuda] Function que retorna una tabla

> Gracias Calabaza, he visto el tema de los cursores,
> pero en realidad, está simplificado mi ejemplo...

1er Problema:
> básicamente tengo que loopear una determinada tabla,
> manipular los datos de cada registros y luego
> hacer el return de ciertos datos _cocinados_.

2do Problema:
> Otra cosa que necesito, es agregar returns con datos
> especificos o sea, return algo, algo.

3er Problema:
> Por otro lado, si, una vez que pueda hacer
> select * from my_funcion(), la necesito joinear con otras.

Bueno según lo que dices tienes 3 problemas, me parece mejor,
salvo mejor parecer de algun compañero de la lista, para los casos 1 y
2, hacerlo en funciones separadas, y unificar el resultado desde el
lado del cliente.

Y para el tercer caso, apenas tenga un tiempito
hago mis pruebas y te cuento..

Un Abrazo.
--
§~^Calabaza^~§ from Villa Elisa, Paraguay
--
TIP 1: para suscribirte y desuscribirte, visita http://archives.postgresql.org/pgsql-es-ayuda


From: Calabaza <calalinux(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Function que retorna una tabla
Date: 2009-02-23 13:13:18
Message-ID: 958993320902230513m627df76cl6299c8bd24588ef6@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

El día 23 de febrero de 2009 9:58, Conrado Blasetti
<conrado(at)mapfre(dot)com(dot)ar> escribió:
> -----Mensaje original-----
> De: pgsql-es-ayuda-owner(at)postgresql(dot)org [mailto:pgsql-es-ayuda-owner(at)postgresql(dot)org] En nombre de Calabaza
> Enviado el: Lunes, 23 de Febrero de 2009 10:47 a.m.
> Para: pgsql-es-ayuda(at)postgresql(dot)org
> Asunto: Re: [pgsql-es-ayuda] Function que retorna una tabla
>
>
>> Gracias Calabaza, he visto el tema de los cursores,
>> pero en realidad, está simplificado mi ejemplo...
>
> 1er Problema:
>> básicamente tengo que loopear una determinada tabla,
>> manipular los datos de cada registros y luego
>> hacer el return de ciertos datos _cocinados_.
>
> 2do Problema:
>> Otra cosa que necesito, es agregar returns con datos
>> especificos o sea, return algo, algo.
>
> 3er Problema:
>> Por otro lado, si, una vez que pueda hacer
>> select * from my_funcion(), la necesito joinear con otras.
>
> Bueno según lo que dices tienes 3 problemas, me parece mejor,
> salvo mejor parecer de algun compañero de la lista, para los casos 1 y
> 2, hacerlo en funciones separadas, y unificar el resultado desde el
> lado del cliente.
>
> Y para el tercer caso, apenas tenga un tiempito
> hago mis pruebas y te cuento..
>
> Un Abrazo.
> --
> §~^Calabaza^~§ from Villa Elisa, Paraguay
> --
> TIP 1: para suscribirte y desuscribirte, visita http://archives.postgresql.org/pgsql-es-ayuda
>

Le agradeceríamos no hacer top-posting por favor,

> Calabaza, gracias. Si, tengo alternativas, y quise optar por la prioridad
>
> SQL
> PL
> DESDE EL CLIENTE

> Pero creo que desde PL debería poder hacerlo,
> lo que pasa es que necesito encapsularlo
> todo en la misma funcion, no se si será mejor,
> pero quiero rumbear para ese lado
> Igual, tenida en cuenta la recomendación, reformularé mis puntos a resolver.

El problema que yo veo es que quieres devolver resultados
y luego seguir ejecutando la función, y eso ya no sé si se pueda.

Si solo quieres devolver un resultado desde una función, creo (que me
corrija alguien por favor si me equivoco, porque nunca lo probé) que
puedes llamar a las demás funciones desde la función principal por así
decirlo y devolver un resultado (lo de un resultado me refiero a que
la función se ejecuta una vez y te devuelve tu cursor o lo que le
digas que te devuelva).

> Gracias
>

Un abrazo.
--
§~^Calabaza^~§ from Villa Elisa, Paraguay


From: "Conrado Blasetti" <conrado(at)mapfre(dot)com(dot)ar>
To: "Calabaza" <calalinux(at)gmail(dot)com>, <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Function que retorna una tabla
Date: 2009-02-23 13:27:53
Message-ID: 76A99F19229DC440909CF1B905F8012C0790AE65@sar001998.Mapfre.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Bien, tomado en cuenta, lo que pasa, es que me resisto a pensar que no se puede, en Oracle select * from table( function() ), desde function, hacía lo que necesito, pero bien, será cuestión de adaptación!

Gracias

-----Mensaje original-----
De: pgsql-es-ayuda-owner(at)postgresql(dot)org [mailto:pgsql-es-ayuda-owner(at)postgresql(dot)org] En nombre de Calabaza
Enviado el: Lunes, 23 de Febrero de 2009 11:13 a.m.
Para: pgsql-es-ayuda(at)postgresql(dot)org
Asunto: Re: [pgsql-es-ayuda] Function que retorna una tabla

El día 23 de febrero de 2009 9:58, Conrado Blasetti
<conrado(at)mapfre(dot)com(dot)ar> escribió:
> -----Mensaje original-----
> De: pgsql-es-ayuda-owner(at)postgresql(dot)org [mailto:pgsql-es-ayuda-owner(at)postgresql(dot)org] En nombre de Calabaza
> Enviado el: Lunes, 23 de Febrero de 2009 10:47 a.m.
> Para: pgsql-es-ayuda(at)postgresql(dot)org
> Asunto: Re: [pgsql-es-ayuda] Function que retorna una tabla
>
>
>> Gracias Calabaza, he visto el tema de los cursores,
>> pero en realidad, está simplificado mi ejemplo...
>
> 1er Problema:
>> básicamente tengo que loopear una determinada tabla,
>> manipular los datos de cada registros y luego
>> hacer el return de ciertos datos _cocinados_.
>
> 2do Problema:
>> Otra cosa que necesito, es agregar returns con datos
>> especificos o sea, return algo, algo.
>
> 3er Problema:
>> Por otro lado, si, una vez que pueda hacer
>> select * from my_funcion(), la necesito joinear con otras.
>
> Bueno según lo que dices tienes 3 problemas, me parece mejor,
> salvo mejor parecer de algun compañero de la lista, para los casos 1 y
> 2, hacerlo en funciones separadas, y unificar el resultado desde el
> lado del cliente.
>
> Y para el tercer caso, apenas tenga un tiempito
> hago mis pruebas y te cuento..
>
> Un Abrazo.
> --
> §~^Calabaza^~§ from Villa Elisa, Paraguay
> --
> TIP 1: para suscribirte y desuscribirte, visita http://archives.postgresql.org/pgsql-es-ayuda
>

Le agradeceríamos no hacer top-posting por favor,

> Calabaza, gracias. Si, tengo alternativas, y quise optar por la prioridad
>
> SQL
> PL
> DESDE EL CLIENTE

> Pero creo que desde PL debería poder hacerlo,
> lo que pasa es que necesito encapsularlo
> todo en la misma funcion, no se si será mejor,
> pero quiero rumbear para ese lado
> Igual, tenida en cuenta la recomendación, reformularé mis puntos a resolver.

El problema que yo veo es que quieres devolver resultados
y luego seguir ejecutando la función, y eso ya no sé si se pueda.

Si solo quieres devolver un resultado desde una función, creo (que me
corrija alguien por favor si me equivoco, porque nunca lo probé) que
puedes llamar a las demás funciones desde la función principal por así
decirlo y devolver un resultado (lo de un resultado me refiero a que
la función se ejecuta una vez y te devuelve tu cursor o lo que le
digas que te devuelva).

> Gracias
>

Un abrazo.
--
§~^Calabaza^~§ from Villa Elisa, Paraguay
--
TIP 1: para suscribirte y desuscribirte, visita http://archives.postgresql.org/pgsql-es-ayuda


From: Silvio Quadri <silvioq(at)gmail(dot)com>
To: Conrado Blasetti <conrado(at)mapfre(dot)com(dot)ar>
Cc: Calabaza <calalinux(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Function que retorna una tabla
Date: 2009-02-23 13:50:22
Message-ID: 61dc71dc0902230550w5f0f1ac1gf135c27329e4971f@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

El día 23 de febrero de 2009 11:27, Conrado Blasetti
<conrado(at)mapfre(dot)com(dot)ar> escribió:
> Bien, tomado en cuenta, lo que pasa, es que me resisto a pensar que no se puede, en Oracle select * from table( function() ), desde function, hacía lo que necesito, pero bien, será cuestión de adaptación!
>
> Gracias

Sí que se puede
Solo con ...

select * from function()

en el caso que function() devuelva una tabla es suficiente.
Si querés joinear ...

select * from function() a, tabla b where a.campo1 = b.campo1

funciona

Si querés recorrer function() en una sp y cambiar datos, sólo
necesitás hacer ...

for rresultado in select * from function
loop
rresultado.campo1 = f_cualquiera1();
rresultado.campo2 = f_cualquiera2();
rresultado.campo3 = f_cualquiera3();
return next rresultado;
end loop;

y listo ...

Lamentablemente, perdí el hilo de cómo venía la conversación, pero me
parece que lo que te estoy respondiendo es suficiente.
Saludos!

Silvio


From: "Conrado Blasetti" <conrado(at)mapfre(dot)com(dot)ar>
To: "Silvio Quadri" <silvioq(at)gmail(dot)com>
Cc: "Calabaza" <calalinux(at)gmail(dot)com>, <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Function que retorna una tabla
Date: 2009-02-23 14:12:01
Message-ID: 76A99F19229DC440909CF1B905F8012C0790B148@sar001998.Mapfre.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Silvio, gracias por responder, pero me estas respondiendo mi ultima consulta.

En tu ejemplo, lo que necesito es desarrollar function(), que sea capaz de devolver la tabla que me comentas.

La funcion debe devolver campos cuyos valores pueda cargar a mano.

Ej

Declare
Reg my_type;
Begin
For c1 in (select 1 as codigo, 'algo' as desc union select 2 as codigo, 'otro algo' as desc) loop
Reg.codigo := c1.codigo;
Reg.descripcion:= c1.desc;
Return next reg;
End loop;

--EN ESTA MISMA FUNCTION
Reg.codigo := 999;
Reg.descripcion:= 'desc inventada';

Return next reg;

End;

-----Mensaje original-----
De: Silvio Quadri [mailto:silvioq(at)gmail(dot)com]
Enviado el: Lunes, 23 de Febrero de 2009 11:50 a.m.
Para: Conrado Blasetti
CC: Calabaza; pgsql-es-ayuda(at)postgresql(dot)org
Asunto: Re: [pgsql-es-ayuda] Function que retorna una tabla

El día 23 de febrero de 2009 11:27, Conrado Blasetti
<conrado(at)mapfre(dot)com(dot)ar> escribió:
> Bien, tomado en cuenta, lo que pasa, es que me resisto a pensar que no se puede, en Oracle select * from table( function() ), desde function, hacía lo que necesito, pero bien, será cuestión de adaptación!
>
> Gracias

Sí que se puede
Solo con ...

select * from function()

en el caso que function() devuelva una tabla es suficiente.
Si querés joinear ...

select * from function() a, tabla b where a.campo1 = b.campo1

funciona

Si querés recorrer function() en una sp y cambiar datos, sólo
necesitás hacer ...

for rresultado in select * from function
loop
rresultado.campo1 = f_cualquiera1();
rresultado.campo2 = f_cualquiera2();
rresultado.campo3 = f_cualquiera3();
return next rresultado;
end loop;

y listo ...

Lamentablemente, perdí el hilo de cómo venía la conversación, pero me
parece que lo que te estoy respondiendo es suficiente.
Saludos!

Silvio


From: Silvio Quadri <silvioq(at)gmail(dot)com>
To: Conrado Blasetti <conrado(at)mapfre(dot)com(dot)ar>
Cc: Calabaza <calalinux(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Function que retorna una tabla
Date: 2009-02-23 15:54:52
Message-ID: 61dc71dc0902230754u7cbf22b6k25cca0bbe4be79de@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

El día 23 de febrero de 2009 12:12, Conrado Blasetti
<conrado(at)mapfre(dot)com(dot)ar> escribió:
> Silvio, gracias por responder, pero me estas respondiendo mi ultima consulta.
>
> En tu ejemplo, lo que necesito es desarrollar function(), que sea capaz de devolver la tabla que me comentas.
>
> La funcion debe devolver campos cuyos valores pueda cargar a mano.
>
> Ej
>
>
> Declare
> Reg my_type;
> Begin
> For c1 in (select 1 as codigo, 'algo' as desc union select 2 as codigo, 'otro algo' as desc) loop
> Reg.codigo := c1.codigo;
> Reg.descripcion:= c1.desc;
> Return next reg;
> End loop;
>
> --EN ESTA MISMA FUNCTION
> Reg.codigo := 999;
> Reg.descripcion:= 'desc inventada';
>
> Return next reg;
>
> End;

¿Por qué no funciona?
A simple vista, si ponés un return al final antes del último end,
debería caminar.

Silvio


From: Gabriel Hermes Colina Zambra <hermeszambra(at)yahoo(dot)com>
To: Rodriguez Fernando <rodriguez(at)ort(dot)edu(dot)uy>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Diferencia 8.2 con 8.3 en parametro funcion sql, meno
Date: 2009-02-24 04:45:18
Message-ID: 660303.74658.qm@web63706.mail.re1.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

> >
> Hola, en 8.3 ya no "castea", en forma automática
> de char a nro.
>

>
> Saludos Fernando

Gracias Fernando ya esto resolviendo todos esos inconvenientes.

¡Sé el Bello 51 de People en Español! ¡Es tu oportunidad de Brillar! Sube tus fotos ya. http://www.51bello.com/


From: "Marcelino Guerrero \(GMail\)" <mguerreroh(at)gmail(dot)com>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Windows Vista de 64 Bits: Conexión a Servidor Postgres via el ODBC
Date: 2009-02-26 22:08:53
Message-ID: 00ef01c9985e$cfe970a0$6fbc51e0$@com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Amigos,

El dia de hoy hemos tenido un problema con la conexión desde un Programa
hecho en VB6 hacia un Servidor Postgres, la Pc tiene Windows Vista y es de
64 bits, felizmente el tema ya fue resuelto, claro la idea de este mensaje
es copiar la solución, por un lado quizás haya alguien que tiene el mismo
problema o quizás alguien me pueda dar una recomendación en caso lo hayamos
hecho de una forma incorrecta.

Hay que realizar lo siguiente para que funcione el odbc de Postgres en
Windows Vista 64 bits:

1.-Editar el archivo psqlodbc.reg agregando "Wow6432Node" tal como como se
muestra:

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI]
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI\ODBC Drivers]
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI\PostgreSQL]

2.-Ejecutar el Archivo psqlodbc.reg con los cambios realizados.

3.-Luego el Archivo psqlodbc.dll pegarlo en :

C:\Windows\SysWow64

Espero sus comentarios en caso sean necesarios.

Slds