2017-05-06 63 views
0

當兩個查詢獨立運行用戶時我得到的結果300和0但是在我的函數中我沒有返回行。爲什麼我的plpgsql函數沒有返回行

我正在從SQL Server遷移到PostgresSQL,所以有些東西對我來說有點陌生!

create or replace function getsummary(userid int) 
returns table (assetTotal numeric, liabilityTotal numeric) 
as $$ 
BEGIN 

SELECT sum(t.credit) - sum(t.debit) 
into assetTotal 
    from transactions t 
    join user_institutes i on t.user_institute_id = i.id 
    where i.account_type in (1,3,4,5) 
    and i.user_id = userid; 

    select sum(t.credit) - sum(t.debit) 
    into liabilityTotal 
    from transactions t 
    join user_institutes i on t.user_institute_id = i.id 
    where i.account_type in (2,8,10) 
    and i.user_id = userid; 
END 
$$ language plpgsql; 

select * from getsummary(1) 

非常感謝

+0

它可能還表示,並沒有返回達到?..這isbecause你不要有任何out參數和返回不要什麼...你做實際的INSERT INTO assetTotal表?.. –

+0

@VaoTsun ,nope只是說沒有行返回和執行時間。所以我錯誤地認爲將x插入x填充我的表格?現在我想想它是否想以某種方式插入到行中並將其插入到表中以返回? – dave

+0

哦 - 我以爲OP意味着他從t-SQL到plpgsql的movng :) –

回答

1

不深找你的疑問,只是指出缺少的一部分。嘗試?:

create or replace function getsummary(userid int) 
returns table (assetTotal numeric, liabilityTotal numeric) 
as $$ 
DECLARE 
_assetTotal numeric; 
_liabilityTotal numeric; 
BEGIN 

SELECT sum(t.credit) - sum(t.debit) 
into _assetTotal 
    from transactions t 
    join user_institutes i on t.user_institute_id = i.id 
    where i.account_type in (1,3,4,5) 
    and i.user_id = userid; 

    select sum(t.credit) - sum(t.debit) 
    into _liabilityTotal 
    from transactions t 
    join user_institutes i on t.user_institute_id = i.id 
    where i.account_type in (2,8,10) 
    and i.user_id = userid; 
    return query select _assetTotal, _liabilityTotal; 
END 
$$ language plpgsql; 
+0

謝謝!我不得不將聲明的類型更改爲數字,但這樣做的竅門! – dave

+0

是的 - 謝謝注意 - 錯過了這個類型。固定。 –