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