use*_*521 5 postgresql postgresql-9.4
create function test(a integer, b integer)
returns table (a integer, b integer) as $$
begin
return query select 1, 2;
end;
$$ language plpgsql;
Run Code Online (Sandbox Code Playgroud)
抛出异常:
ERROR: parameter name "a" used more than once
CONTEXT: compilation of PL/pgSQL function "test" near line 1
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况?我认为函数参数名称与返回的表列名称无关。是否有一种解决方法可以让函数参数命名为“a”,并且在从函数返回的表中还有名为“a”的列?
我知道我可以返回,setof record
但是我必须明确地“定义”从选择查询中的函数返回的列:
create function test(a integer, b integer)
returns setof record as $$
begin
return query select 1, 2;
end;
$$ language plpgsql;
select * from test(1, 2) as (a integer, b integer)
Run Code Online (Sandbox Code Playgroud)
您已经定义了一个具有相同名称的输入变量和一个返回变量,因此 PL/PGSQL 无法消除它的歧义,正如错误消息所告诉您的那样。
您也可以将其更改returns table (c integer, d integer)
为,或者您可以为此创建一个类型,例如CREATE TYPE mytype (a integer, b integer)
,然后在您的函数中使用它 as returns setof mytype
,这应该为您提供您正在寻找的行为,而不会冲突变量。
归档时间: |
|
查看次数: |
2484 次 |
最近记录: |