gpt4 book ai didi

sql - PostgreSQL 数学函数错误

转载 作者:行者123 更新时间:2023-11-29 14:02:26 32 4
gpt4 key购买 nike

我从确定性 PG 函数中收到错误,该错误似乎取决于我在查询中调用它的时间。

函数是:

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 不会以某种方式缓存损坏的定义。

最佳答案

您的数据库在哪个版本和平台上运行?

您是否尝试过用 SQL 重写该函数:

CREATE OR REPLACE FUNCTION ircm(numeric, numeric, numeric)
RETURNS numeric AS $$
select 12 * (pow(($2 / $1), (1. / (12.* ($3 / 365.)))) - 1);
$$ LANGUAGE sql immutable;

我在 Solaris、Linux 和 Mac OS X 上运行 v8.4.4,并从直接调用的 plpgsql(和我的 SQL)版本以及子查询中获得相同的结果。

关于sql - PostgreSQL 数学函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3484778/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com