1
我得到一個確定性的PG函數的錯誤,這個函數看起來依賴於我在查詢中調用它的時間。PostgreSQL數學函數錯誤
功能是:
CREATE OR REPLACE FUNCTION ircm(starting_money numeric, value numeric, days numeric)
RETURNS numeric
AS $$
BEGIN
-- Calculate effective interest rate, compounded monthly.
RETURN 12*(pow((value/starting_money),(1./(12.*(days/365.)))) - 1);
END;
$$ LANGUAGE plpgsql;
如果我把它在一個簡單的SELECT語句,它工作正常:
SELECT ircm(100.00,60.427500643787215,30)
Result: -4.79925436505569765596
然而,當我運行從不同的SELECT語句完全一樣的通話使用子查詢:
SELECT
ircm(100.00,m.v::numeric,30) AS result
FROM(
SELECT 60.427500643787215 AS v
) m
我得到的錯誤:
ERROR: a negative number raised to a non-integer power yields a complex result
CONTEXT: PL/pgSQL function "ircm" line 6 at RETURN
由於呼叫在邏輯上是等價的,PG如何爲一次呼叫返回錯誤,而不是另一次?我已經確定在我的數據庫中只有一個「ircm」函數的定義。我試過再次添加/添加它,以確保PG不會緩存已損壞的定義。
我剛試過我的機器(版本8.4),第二個適用於我並返回'-4.79925436505569765596' – 2010-08-14 19:40:13
如果添加'RAISE NOTICE'值/ starting_money%'行,值/ starting_money;這是你作爲一個強大的部分,至少在消息選項卡中的打印語句的存在將確保你正在使用正確的功能。 – 2010-08-14 20:07:47
與此相同:給出的示例在Windows上使用8.4.3(通過JDBC查詢工具)。所以無論這是你的PostgreSQL版本的錯誤,還是你沒有向我們展示完整的圖片。 – 2010-08-16 15:58:27