我尝试从两列中的所有记录中使用不同的表并在彼此之间划分,但我只得到第一行的结果而不是所有行的结果我如何解决这个问题?
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();
答案 0 :(得分:1)
假设你的"人类"表和"地区"表都有一个ID字段。并且假设您的人员表有一个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();