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
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? |