2016-12-22 47 views
0

我尝试从两列中的所有记录与不同的表和分隔彼此之间,但我只有结果从第一行不是从所有行我怎么能解决这个问题?Postgres sql返回值

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(); 

回答

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();