postgres函数返回的特定列名

时间:2016-02-14 07:18:20

标签: postgresql function

在postgres中我有一个自定义函数,它将加入名字和姓氏。

  CREATE FUNCTION full_name(u users) RETURNS varchar
  LANGUAGE plpgsql VOLATILE
  AS $$
    BEGIN
      RETURN CONCAT_WS(' ', u.first_name, u.last_name);
    END;
  $$;

如果我不必设置列名的名称并且它由函数确定,那将是很好的。

例如。这里我要说列名是full_name

SELECT
 full_name(users) as full_name

但如果它以原子方式将其命名为full_name

,那就太好了
SELECT
full_name(users)

是否可以在自定义功能中设置?

3 个答案:

答案 0 :(得分:1)

由于函数参数是表的名称,因此您不必传递它。

您可以这样称呼它:

select u.full_name
from users u;

请注意,您在函数名前加上表名。您也可以使用别名,但仍需要前缀。

full_name

在这种情况下,结果集中的列将被命名为stable(函数名称)

Btw:你不需要PL / pgSQL来实现这个功能。一个普通的SQL可能会更快。特别是当你声明它volatile而不是Price 0.10 0.15 0.20 ------------------------- $10.00 $1.00 $1.50 $2.00 $20.00 $2.00 $3.00 $4.00 时 - 它可以被内联并且调用函数的开销被消除。

答案 1 :(得分:1)

尝试使用out参数而不是返回值:

CREATE FUNCTION full_name(in u users, out full_name varchar)
LANGUAGE plpgsql VOLATILE
AS $$
  BEGIN
    full_name := CONCAT_WS(' ', u.first_name, u.last_name);
  END;
$$;

SELECT * FROM full_name(users)

答案 2 :(得分:0)

这可能是您问题的解决方案。您可以使用first_name和last_name作为函数的参数,而不是将用户作为参数传递。

CREATE OR REPLACE FUNCTION full_name(character varying ,character varying)
 RETURNS character varying AS
$BODY$
declare
    l_nom ALIAS FOR $1;
    l_pnom ALIAS FOR $2;
begin

    RETURN CONCAT_WS(' ', l_nom, l_pnom);    
 end;$BODY$
 LANGUAGE plpgsql VOLATILE
COST 100;
     ALTER FUNCTION full_name(character varying ,character varying) OWNER TO postgres;

SELECT full_name(u.first_name, u.last_name)