Re: como crear una funcion que devuelva dos valores o un registro

From: "Marcelo Retamal Vallejos" <mretamal(at)cmet(dot)net>
To: <jcvp1977(at)yahoo(dot)com>
Cc: "Lista Postgres" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: como crear una funcion que devuelva dos valores o un registro
Date: 2005-01-10 16:14:07
Message-ID: 009001c4f72f$7329a850$da018282@ultra.cmet.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola, existe otra opción de creación de una f(x) para retornad dos valores.
1º crear un tipo de registro, asi como
create type nombre_tipo (campo_tipo1 as tipo de dato,....campo_tipon as
tipo de dato);
2 º crear la función que retornará el tipo de datos:
create function nombref(x)(campo1,campo2,...campo_n) returns nombre_tipo
as ' declare...
3º Definir una variable del tipo de registro:
variable_tipo nombre_tipo%rowtype;

4º Cuando obtienes los valores que necesitas asignas el resultado de esta
forma:
variable_tipo.campo_tipo1 := registro.camposelect;

5º Devolver el registro de esta forma:
return variable_tipo;

Aquí hay un ejemplo concreto:

drop type registro_sda cascade;
create type registro_sda as (numero varchar(8),ficticio boolean);

create function proc_busqueda_numeros_sda(int,int,varchar(6)) returns
registro_sda as '
declare
planta alias for $1;
ciclo alias for $2;
troncal alias for $3;
myrec record;
registro registro_sda%rowtype;
begin
select sda_snumero,sda_bficticio into myrec from sda where
sda_nplanta = planta and sda_nciclo = ciclo
and sda_stroncal = troncal;
if not found then
registro.numero := '' '';
registro.ficticio := ''false'';
else
registro.numero := myrec.sda_snumero;
registro.ficticio := myrec.sda_bficticio;
end if;
return registro;
end;
'language 'plpgsql';

Chao.

----- Mensaje original -----
De: "Roberto Andrade Fonseca" <randradefonseca(at)gmail(dot)com>
Para: "Juan Carlo Vallejos" <jcvp1977(at)yahoo(dot)com>
CC: <pgsql-es-ayuda(at)postgresql(dot)org>
Enviado: Friday, January 07, 2005 5:20 PM
Asunto: Re: [pgsql-es-ayuda] como crear una funcion que devuelva dos valores
o un registro

Hola:

On Fri, 7 Jan 2005 14:26:53 -0600 (CST), Juan Carlo Vallejos
<jcvp1977(at)yahoo(dot)com> wrote:
> Hola,
>
> espero me puedan ayudar, quiero crear una funcion que
> me devuela dos valores deacuerdo a una consulta
> (SELECT) con los parameros que yo le de..

Esto te debe servir de ejemplo:
----------------------------------------------------
-- Función para obtener, de los componentes de un kit:
-- Se debe llamar así:
-- select * from get_precios_articulos(2) as (id_articulo varchar,
descripcion varchar , precio_lista numeric(10,2), precio_kit
numeric(10,2), precio_total numeric(10,2));
-- El parámetro de la función es el identificador del kit (id_ensamble).
----------------------------------------------------
CREATE OR REPLACE FUNCTION get_precios_articulos(integer) RETURNS setof
record AS '
DECLARE
my_id_ensamble ALIAS FOR $1;
rec record;
my_precio_kit numeric(10,2);
my_precio_total numeric(10,2);

BEGIN

...

FOR rec IN
SELECT
a.id_articulo,
a.descripcion,
a.precio_lista,
my_precio_kit,
my_precio_total

FROM
ensamblados e,
ensamblados_has_articulos eha,
tipo_articulo t,
articulos a
WHERE
eha.id_articulo = a.id_articulo and
a.id_tipo_articulo = t.id_tipo_articulo and
e.id_ensamble = eha.id_ensamble and
e.id_ensamble= my_id_ensamble
LOOP
RETURN NEXT rec;
END LOOP;
RETURN;
END;
' LANGUAGE 'plpgsql' VOLATILE;

-------------------------------------
Saludos,

--
Roberto Andrade Fonseca
Inteligentes.com, S.A. de C.V.
Tel. 5207-1672/1673

---------------------------(end of broadcast)---------------------------
TIP 4: No hagas 'kill -9' a postmaster

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message sandrirgo lezcano 2005-01-10 18:23:38 cambio de e-mail - OT
Previous Message Esteban Osorio 2005-01-10 15:31:21 RE: Casts en parametros Int2 a funciones