<http://www.postgresql.org/docs/current/static/sql-select.html>

Hola a todos, he estado buscando como crear una función con un SELECT
y leyendo en la documentación:

http://www.postgresql.org/docs/current/static/sql-select.html

Encontre el siguiente los siguientes ejemplos:

This example shows how to use a function in the FROM clause, both with and
without a column definition list:

CREATE FUNCTION distributors(int) RETURNS SETOF distributors AS $$
    SELECT * FROM distributors WHERE did = $1;
$$ LANGUAGE SQL;

SELECT * FROM distributors(111);
 did |    name
-----+-------------
 111 | Walt Disney

CREATE FUNCTION distributors_2(int) RETURNS SETOF record AS $$
    SELECT * FROM distributors WHERE did = $1;
$$ LANGUAGE SQL;

SELECT * FROM distributors_2(111) AS (f1 int, f2 text);
 f1  |     f2
-----+-------------
 111 | Walt Disney


Y hice pruebas con un select simple:

1ro:

CREATE OR REPLACE FUNCTION F_CONSULTA_PARAMETRO(VARCHAR) RETURNS SETOF
MA_PERSONAL AS $$
    SELECT *
      FROM MA_PERSONAL
     WHERE IDCODIGO = $1;
$$ LANGUAGE SQL;

SELECT * FROM F_CONSULTA_PARAMETRO('000033');

2do:

CREATE OR REPLACE FUNCTION F_CONSULTA_PARAMETRO2(VARCHAR) RETURNS
SETOF record AS $$
    SELECT APPATER || ' ' || APMATER || ' ' || NOMBRES AS PERSONA
      FROM MA_PERSONAL
     WHERE IDCODIGO = $1;
$$ LANGUAGE SQL;

SELECT * FROM F_CONSULTA_PARAMETRO2('000033') AS (PERSONA VARCHAR);

El 1ro retorna toda la tabla me puede servir para cosas simples que necesite.

El 2do me podria servir para select mas personalizados con joins pero
tendria que declarar siempre el campo o los campos de la tablas o
tablas involucradas en el select?

Hay manera de crear una función sin necesidad de estar declarando los campos?

Saludos

Responder a