创建函数时如何return列与原始table同名?
How to return columns with the same name as original table when creating function?
所以我有这个功能:
create function report (varchar)
returns table (
id bigint,
src_data_system_id int8
)
language plpgsql
as $$
begin
return query
select id, src_data_system_id from process_log_objects plo
where src_data_system_name = 'somecondition'||;
end $$
如果在 returns
块中我在函数体中使用与 select 查询中相同的列名,那么当我这样做时 select * from report('dict_day');
我得到一个错误
ERROR: column reference "id" is ambiguous
Detail: It could refer to either a PL/pgSQL variable or a table column.
如何 return 来自该查询的原始列名?
谢谢!
您必须使用 table 名称限定列:
RETURN QUERY
SELECT plo.id, plo.src_data_system_id FROM process_log_objects plo
...
为避免此类问题,为函数使用不同的参数名称是一种很好的风格。
所以我有这个功能:
create function report (varchar)
returns table (
id bigint,
src_data_system_id int8
)
language plpgsql
as $$
begin
return query
select id, src_data_system_id from process_log_objects plo
where src_data_system_name = 'somecondition'||;
end $$
如果在 returns
块中我在函数体中使用与 select 查询中相同的列名,那么当我这样做时 select * from report('dict_day');
我得到一个错误
ERROR: column reference "id" is ambiguous
Detail: It could refer to either a PL/pgSQL variable or a table column.
如何 return 来自该查询的原始列名?
谢谢!
您必须使用 table 名称限定列:
RETURN QUERY
SELECT plo.id, plo.src_data_system_id FROM process_log_objects plo
...
为避免此类问题,为函数使用不同的参数名称是一种很好的风格。