2016-02-27 688 views
-3

我有一个存储过程只使用SELECT语句(通过使用其他存储过程)求和和检索数据。在这些存储过程中没有更新或插入,当然所有涉及的数据都是静态的。这个主存储过程返回double。奇怪的是,如果我执行它几次,通常3到4次之后,结果与前3 - 4次结果不同,然后继续执行它。PostgreSQL中的查询结果不一致?

我想它的,因为计算机精度问题,但结果仍在100万的差别可高达4〜8

+0

你能分享你的代码吗? – Mureinik

+0

http://pastebin.com/qtDyjufU – Mideel

+0

你好米蒂尔,欢迎来到SO。查看关于使用[最小化,完整且可验证的示例]提问的指导(http://stackoverflow.com/help/mcve)。否则,几乎不可能给你一个正确的答案。 – Patrick

回答

0

问题是最有可能在这里:

IF (FOUND) THEN 
    vSaldo := vRecSearchSaldoAwal.balance; 
    RAISE NOTICE 'Balance Adjustment: %', vRecSearchSaldoAwal.balance; 

    ... 

    SELECT (_dateStart - INTERVAL '1 day'), NULL, NULL, vSaldo, TX_STOCKADJ, 'Saldo Sebelumnya' INTO vRetval; 

    RETURN NEXT vRetval; 

ELSEIF (NOT FOUND) THEN 
    vSaldo := SumQtyBeginningBal(_idproduct, _idGudang); 

    ... 

短语ELSEIF (NOT FOUND) THEN查看FOUND,该值由IF/IFELSE块内的最后一条SELECT语句设置。您可能需要改为使用简单的ELSE