【发布时间】:2013-10-22 02:12:24
【问题描述】:
我正在编写一个执行以下操作的函数:
创建一个包含单个字段的临时表。 该字段是特定表中最多 5 个变量的总和。
假设我有下表:
create table src (x1 numeric, x2 numeric);
insert into src values (2,1),(5,2),(10,4);
我的代码是:
create or replace function qwert(cod numeric, v1 numeric default 0
, v2 numeric default 0, v3 numeric default 0, v4 numeric default 0,
v5 numeric default 0)
returns numeric as
$func$
declare vv numeric;
begin
vv = v1+v2+v3+v4+v5;
execute '
drop table if exists t' || cod || ';
create temporary table t' || cod || ' as
select ' || vv || ' ;'
;
return vv;
end
$func$ language plpgsql;
如果我运行: 从 src 中选择 qwert(1, x1,x2);
预期结果是一个表t1:
column1
---------
3
7
14
(3 rows)
结果却是:
db1=# select * from t1;
?column?
----------
14
(1 row)
在我的代码中,行: 返回 vv; 只是用来检查 vv 是否被正确创建。
有人可以帮助你吗?
【问题讨论】:
-
对不起。我编辑了这个问题。希望现在清楚了。
-
你需要临时表做什么?或者这只是从函数中获取一组行的(失败的)尝试?另外,您的问题仍然没有加起来。您想从表
src中求和x1 + x2吗? -
我需要一个临时表来存储我需要在进一步计算中使用的新变量。在每个会话中,我的输入变量可能会发生变化。我想总结五列,因此我将默认值设置为零。例如,我只是想对两列求和(来自 src 的 x1 和 x2)。结果表应该有 x1+x2 (3,7,14)。非常抱歉。我的查询应该是: select qwert(1, x1,x2) from src; (因此混乱,我认为......)
标签: postgresql user-defined-functions plpgsql execute dynamic-sql