在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)
是否可以在自定义功能中设置?
答案 0 :(得分:1)
由于函数参数是表的名称,因此您不必传递它。
您可以这样称呼它:
select u.full_name
from users u;
请注意,您有在函数名前加上表名。您也可以使用别名,但仍需要前缀。
full_name
在这种情况下,结果集中的列将被命名为stable
(函数名称)
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)