Re: [pgsql-es-ayuda] Como ejecuto una función set of record desde consola

From: Emanuel Calvo Franco <postgres(dot)arg(at)gmail(dot)com>
To: ALFONSO REYES <alfonsoreyescruz(at)hotmail(dot)com>
Cc: lista ayuda postgres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: [pgsql-es-ayuda] Como ejecuto una función set of record desde consola
Date: 2009-04-21 12:51:03
Message-ID: f205bb120904210551q18276dd3o1e308bddd8b5d2cf@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El día 20 de abril de 2009 23:30, ALFONSO REYES
<alfonsoreyescruz(at)hotmail(dot)com> escribió:
> Estimada Lista
> Mi pregunta es sencilla, tengo una función de tipo return set of record con
> 2 parámetros de ingreso int y char :
> CREATE OR REPLACE FUNCTION "danmaf"."gen_obt_estab_punto_dos" (p_id_empresa
> integer, p_unidad_adm varchar) RETURNS SETOF record AS
> $body$
> DECLARE
>  v_establecimiento varchar(3);
>  v_punto varchar(3);
>  v_rec_salida record;
> BEGIN
> for v_rec_salida in
>  (SELECT fa.establecimiento,fa.punto,fa.autorizacion
>       FROM  danmaf.gen_documento gd,danmaf.fac_autorizaciones fa
>       WHERE gd.id_documento=fa.id_documento
>         and gd.nombre='FACTURA'
>         and gd.id_empresa=p_id_empresa
>         and fa.cod_unidad=p_unidad_adm)
>    loop
> return next v_rec_salida;
>    end loop;
>   return;
> END;
> $body$
> LANGUAGE 'plpgsql'
> VOLATILE
> CALLED ON NULL INPUT
> SECURITY INVOKER
> COST 100 ROWS 1000;
>
>
> Según lo que he leído en la red y una vez que me ayudo Alvaro Herrera, creo
> que estoy haciendo lo correcto:
> INTERNET DICE QUE SE EJECUTA ASI:
> SELECT "danmaf"."gen_obt_estab_punto_dos"(4,'1') as f(col1 char,col2 char
> ,col3 char  );
>
> SELECT "danmaf"."gen_obt_estab_punto_dos"(4,'1') as
> f(col1 text,col2 text ,col3  text );
>
> RESULTADO  ERROR :
> ERROR:  syntax error at or near "("
> LINE 1: ...ECT "danmaf"."gen_obt_estab_punto_dos"(4,'1') as f(cola text...
> ALVARO ME INDICO EN ESTE CORREO:
>
> ALFONSO REYES escribió:
>
> Marcos, muchas gracias por tú ayuda, pero a lo que me refiero es como
> debería
> jecutarla desde el query builder, por ejemplo a las funciones que retirnan
> un refcursor se las ejecuta asi: Begin; select funcion('resp_ref_cursor');
> fecth all in "resp_ref_cursor"; commit;
>
> En cambio cuando es un afunción de tipo record como la ejecuto desde el
> query
> builder..
>
> select * from function( ... )
>
> Si es "setof record" entonces tienes que especificar el tipo del record:
>
> select * from function( ... ) as f(a int, b text, c text, ...)
>
> -- Alvaro Herrera http://www.PlanetPostgreSQL.org/ "I'm impressed how
> quickly you are fixing this obscure issue. I came from MS SQL and it would
> be hard for me to put into words how much of a better job you all are doing
> on [PostgreSQL]." Steve Midgley,
> http://archives.postgresql.org/pgsql-sql/2008-08/msg00000.php
>
> -- TIP 3: Si encontraste la respuesta a tu problema, publícala, otros te lo
> agradecerán
>
> Para terminar cuando la ejecuto desde el EXECUTE de la función del SQL
> MANAGER FOR POSTGRES 2007 SI FUNCIONA !!! Y PRIMERO ME PIDE LAS COLUMNAS y
> luego obtengo el resultado,
>
> por favor quisiera saber que estoy haciendo mal...

Retorna un set of record,

SELECT * FROM "danmaf"."gen_obt_estab_punto_dos" (1, 'empresa');

No mandes en formato HTML el mail por favor.

--
Emanuel Calvo Franco
Sumate al ARPUG !
(www.postgres-arg.org -
www.arpug.com.ar)
ArPUG / AOSUG Member
Postgresql Support & Admin

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Virginia 2009-04-21 14:44:10 Re: restaurar bases de datos
Previous Message Daniel Egea 2009-04-21 07:24:41 Re: oracle compro sun que opinan?