Re: Funciones SQL

From: Marcelo Alejandro España Koock <mespanak(at)gmail(dot)com>
To: Mario Soto Cordones <marioa(dot)soto(dot)cordones(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Funciones SQL
Date: 2014-10-15 17:12:07
Message-ID: CAD-_PrGjHxQ6ht1fPxANhuvyB76G=JSz1t299W0cR3+wfE_SbQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Más abajo la misma función con un parámetro de entrada como filtro.

-- Crea la funcion
CREATE OR REPLACE FUNCTION admmek_test_function (in filtro_empalme text,
out contrato varchar, out empalme varchar)
RETURNS SETOF record AS
$body$
DECLARE
_my_record RECORD;
BEGIN
RETURN QUERY SELECT a.codigo_contrato::varchar,b.codigo_empalme::varchar
FROM contratos a INNER JOIN empalmes b ON a.codigo_empalme
= b.codigo_empalme
WHERE a.codigo_empalme=filtro_empalme;
RETURN;
END;
$body$
LANGUAGE 'plpgsql';

-- Ejecuta una instrucción SELECT con la funcion
SELECT * FROM admmek_test_function('0000006346')

El 15 de octubre de 2014, 14:09, Marcelo Alejandro España Koock <
mespanak(at)gmail(dot)com> escribió:

> Estimados Mario y Alvaro,
>
> Muchas gracias por los tips, más abajo script de test que utilicé para la
> prueba de concepto:
>
> -- Crea la funcion
> CREATE OR REPLACE FUNCTION admmek_test_function (out contrato varchar, out
> empalme varchar)
> RETURNS SETOF record AS
> $body$
> DECLARE
> _my_record RECORD;
> BEGIN
> RETURN QUERY SELECT a.codigo_contrato::varchar,b.codigo_empalme::varchar
> FROM contratos a INNER JOIN empalmes b ON a.codigo_empalme
> = b.codigo_empalme;
> RETURN;
> END;
> $body$
> LANGUAGE 'plpgsql';
>
> -- Ejecuta una instrucción SELECT con la funcion
> SELECT * FROM admmek_test_function()
>
> NOTAS:
> - Los nombres de las variables OUT pueden ser diferentes a los nombres de
> los campos de las tablas
> - Se cambia el tipo de dato de los campos del SELECT para que sean iguales
> a los tipos de datos de las variables de salida OUT (Obligatorio que los
> tipos de datos sean iguales)
>
> --
> Atentamente,
>
> Marcelo España Koock
> Cuenta Personal
> GMAIL
>
> El 15 de octubre de 2014, 12:10, Mario Soto Cordones <
> marioa(dot)soto(dot)cordones(at)gmail(dot)com> escribió:
>
>> Marcelo:
>>
>>
>>
>> 1.- Para retornar records, el lenguaje es plpgsql (Procedural Languaje
>> PostgreSQL).
>>
>> 2.- Las variables que dicen OUT, son de Salida, las de entrada tienen IN.
>>
>> 3.- Los campos enunciados en la sentencia select, son los que se
>> devolverán en las variables OUT, es por eso que el select es:
>>
>> SELECT a.nombre,a.domicilio,b.telefono
>>
>>
>>
>> Saludos
>>
>>
>>
>> Mario Soto Cordones
>>
>>
>>
>> *De:* Marcelo Alejandro España Koock [mailto:mespanak(at)gmail(dot)com]
>> *Enviado el:* miércoles, 15 de octubre de 2014 12:00
>> *Para:* Mario Soto Cordones
>> *CC:* pgsql-es-ayuda(at)postgresql(dot)org
>> *Asunto:* Re: [pgsql-es-ayuda] Funciones SQL
>>
>>
>>
>> Mario,
>>
>>
>>
>> Muchas gracias, lo que me envias es en leguaje plpgsql y no en lenguaje
>> sql. Puedo pedirte solo una aclaración:
>>
>>
>>
>> (
>>
>> out _telefono varchar,
>>
>> out _nombre varchar,
>>
>> out _domicilio varchar
>>
>> )
>>
>> ** Estos son parámetros de entrada o parátemros de salida ** ?
>>
>>
>>
>> DECLARE
>>
>> _*my*_record RECORD;
>>
>> ** Basta con esto para saber los registros que serán devueltos son los
>> que indica el SELECT **?
>>
>>
>>
>> Gracias
>>
>>
>>
>>
>>
>> El 15 de octubre de 2014, 11:17, Mario Soto Cordones <
>> marioa(dot)soto(dot)cordones(at)gmail(dot)com> escribió:
>>
>> Marcelo:
>>
>>
>>
>> Para retornar todos los registros que te devuelva la consulta, puedes
>> retornar un Record:
>>
>>
>>
>> Ejemplo:
>>
>>
>>
>> CREATE OR REPLACE FUNCTION my_funcion (
>>
>> out _telefono varchar,
>>
>> out _nombre varchar,
>>
>> out _domicilio varchar
>>
>> )
>>
>> RETURNS SETOF record AS
>>
>> $body$
>>
>> DECLARE
>>
>> _*my*_record RECORD;
>>
>> BEGIN
>>
>> RETURN QUERY SELECT a.nombre,a.domicilio,b.telefono
>>
>> FROM tabla1 a
>>
>> INNER JOIN tabla2 b ON a.ID = b.ID;
>>
>> RETURN;
>>
>> END;
>>
>> $body$
>>
>> LANGUAGE 'plpgsql';
>>
>>
>>
>> Saludos cordiales
>>
>>
>>
>> Mario Soto Cordones
>>
>>
>>
>>
>>
>> *De:* pgsql-es-ayuda-owner(at)postgresql(dot)org [mailto:
>> pgsql-es-ayuda-owner(at)postgresql(dot)org] *En nombre de *Marcelo Alejandro
>> España Koock
>> *Enviado el:* miércoles, 15 de octubre de 2014 10:57
>> *Para:* pgsql-es-ayuda(at)postgresql(dot)org
>> *Asunto:* [pgsql-es-ayuda] Funciones SQL
>>
>>
>>
>> Hola Buenos días,
>>
>>
>>
>> Estoy creando una función SQL en postgres que incluya una instrucción SQL
>> como la siguiente:
>>
>>
>>
>> SELECT *
>>
>> FROM tabla1 INNER JOIN tabla2 ON tabla1.ID = tabla2.ID
>>
>>
>>
>> Tabla1 tiene campos ID, nombre, domicilio
>>
>> Tabla2 tiene campos ID, teléfono
>>
>>
>>
>> Cuando creo la función me solicita un tipo de datos para la RETURNS SETOF
>>
>>
>>
>> ¿Cómo creo ese tipo de datos si la consulta es una combinación de tablas?
>>
>>
>> --
>> Atentamente y agradecido de cualquier ayuda,
>>
>> Marcelo España Koock
>> Cuenta Personal
>> GMAIL
>>
>>
>>
>>
>> --
>> Atentamente,
>>
>> Marcelo España Koock
>> Cuenta Personal
>> GMAIL
>>
>
>
>
> --
> Atentamente,
>
> Marcelo España Koock
> Cuenta Personal
> GMAIL
>

--
Atentamente,

Marcelo España Koock
Cuenta Personal
GMAIL

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Romero, Fernando 2014-10-15 17:15:14 Consulta sobre tablespace
Previous Message Marcelo Alejandro España Koock 2014-10-15 17:09:14 Re: Funciones SQL