2016-12-22 89 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();