如何从具有定制列名称的函数中 return a table?
How do I return a table from a function with a bespoke column name?
此功能有效:
CREATE OR REPLACE FUNCTION public.a()
RETURNS TABLE(a text)
LANGUAGE plpgsql
AS $function$
BEGIN
return query execute
'select a from ztable';
END;
$function$;
但是当我尝试向列名称添加一些文本时:
CREATE OR REPLACE FUNCTION public.a(prefix text)
RETURNS TABLE(a text)
LANGUAGE plpgsql
AS $function$
BEGIN
return query execute
'select a as _a from ztable' using prefix;
END;
$function$;
这只是因为 $1 上的语法错误而失败。
或者:
CREATE OR REPLACE FUNCTION public.a(prefix text)
RETURNS TABLE(a text)
LANGUAGE plpgsql
AS $function$
BEGIN
return query execute
'select a as '||prefix||'_a from ztable';
END;
$function$;
select * from a('some prefix')
无效。
是否有其他一些语法可以完成这项工作?
这根本不可能。 SQL 不允许动态列名。
您必须使用 调用 分配列别名。喜欢:
SELECT a AS prefix_a FROM public.a();
或在直接附加到函数的列定义列表中:
SELECT * FROM public.a() AS f(prefix_a);
或者,在处理 单个 输出列时,甚至只是:
SELECT * FROM public.a() AS prefix_a;
参见:
此功能有效:
CREATE OR REPLACE FUNCTION public.a()
RETURNS TABLE(a text)
LANGUAGE plpgsql
AS $function$
BEGIN
return query execute
'select a from ztable';
END;
$function$;
但是当我尝试向列名称添加一些文本时:
CREATE OR REPLACE FUNCTION public.a(prefix text)
RETURNS TABLE(a text)
LANGUAGE plpgsql
AS $function$
BEGIN
return query execute
'select a as _a from ztable' using prefix;
END;
$function$;
这只是因为 $1 上的语法错误而失败。
或者:
CREATE OR REPLACE FUNCTION public.a(prefix text)
RETURNS TABLE(a text)
LANGUAGE plpgsql
AS $function$
BEGIN
return query execute
'select a as '||prefix||'_a from ztable';
END;
$function$;
select * from a('some prefix')
无效。
是否有其他一些语法可以完成这项工作?
这根本不可能。 SQL 不允许动态列名。
您必须使用 调用 分配列别名。喜欢:
SELECT a AS prefix_a FROM public.a();
或在直接附加到函数的列定义列表中:
SELECT * FROM public.a() AS f(prefix_a);
或者,在处理 单个 输出列时,甚至只是:
SELECT * FROM public.a() AS prefix_a;
参见: