【问题标题】:Postgres sql return valuePostgreSQL 返回值
【发布时间】:2016-12-22 17:44:45
【问题描述】:
我尝试从具有不同表的两列中获取所有记录并在彼此之间进行划分,但我只有第一行而不是所有行的结果我该如何解决这个问题?
CREATE FUNCTION human() RETURNS integer AS $$
DECLARE person integer;
size integer;
def integer;
Begin
Select sizex into size from region;
Select defx into def from humans;
osoba = def / size;
return person;
END;
$$ LANGUAGE 'plpgsql';
select human();
【问题讨论】:
标签:
postgresql
function
stored-procedures
【解决方案1】:
假设您的“humans”表和“region”表都有一个 ID 字段。并且还假设您的 human 表有一个 regionId 字段在您的两个表之间创建关系,我建议您执行以下操作:
CREATE FUNCTION human(arg_humanId int) RETURNS decimal AS $$
DECLARE
div_result decimal;
Begin
SELECT h.defx/r.sizex
INTO result
FROM humans h
JOIN region r on r.ID = h.RegionID
WHERE h.ID = arg_humanId;
RETURN div_result;
END;
$$ LANGUAGE 'plpgsql';
SELECT human(h.ID)
FROM humans h;
请注意,我已将数据类型从整数更改为小数,因为除法通常会产生小数位。
另一种选择是返回 setof 个小数并执行函数内部的所有逻辑:
CREATE FUNCTION human() RETURNS setof decimal AS $$
DECLARE
div_result decimal;
Begin
RETURN QUERY
SELECT h.defx/r.sizex
FROM humans h
JOIN region r on r.ID = h.RegionID;
END;
$$ LANGUAGE 'plpgsql';
SELECT *
FROM human();