获取java.sql.SQLDataException:ORA-01476:计算选择数时,除数等于零
我正在使用Java访问Oracle数据库 我创建了一个SQL函数,它根据用户的交易(购买或销售)计算用户的反馈 反馈值存储在表获取java.sql.SQLDataException:ORA-01476:计算选择数时,除数等于零,java,sql,oracle,Java,Sql,Oracle,我正在使用Java访问Oracle数据库 我创建了一个SQL函数,它根据用户的交易(购买或销售)计算用户的反馈 反馈值存储在表TRANSACCOES中。当我更新反馈列时,该函数工作正常,但当我在“删除”后立即重新计算反馈时(我不是真的删除它,只是将一个标志设置为“已删除”),我得到一个错误:ORA-01476:除数等于零。 如果在那个错误之后,我对另一个事务进行了更新,它会重新计算。所以我不知道为什么会这样 以下是函数: CREATE OR REPLACE FUNCTION calcula_cl
TRANSACCOES
中。当我更新反馈列时,该函数工作正常,但当我在“删除”后立即重新计算反馈时(我不是真的删除它,只是将一个标志设置为“已删除”),我得到一个错误:ORA-01476:除数等于零。
如果在那个错误之后,我对另一个事务进行了更新,它会重新计算。所以我不知道为什么会这样
以下是函数:
CREATE OR REPLACE FUNCTION calcula_classificacao (id_user NUMBER
) RETURN FLOAT AS
counter NUMBER;
sumvendr FLOAT;
sumcompr FLOAT;
f FLOAT;
f1 FLOAT;
BEGIN
SELECT COUNT(t.ID_TRANSACCAO) INTO counter
FROM TRANSACCOES t
JOIN ARTIGOS a
ON a.ID_ARTIGO = t.ID_ARTIGO
WHERE ((t.ID_COMPRADOR = id_user AND t.FEEDBACK_COMPRADOR >= 0)
OR (id_user = a.ID_VENDEDOR AND t.FEEDBACK_VENDEDOR >= 0))
AND t.ELIMINADO = 0;
SELECT SUM(t.FEEDBACK_COMPRADOR) INTO sumcompr
FROM TRANSACCOES t
JOIN ARTIGOS a
ON a.ID_ARTIGO = t.ID_ARTIGO
WHERE t.ID_COMPRADOR = id_user
AND t.ELIMINADO = 0
AND t.FEEDBACK_COMPRADOR >= 0;
SELECT SUM(t.FEEDBACK_VENDEDOR) INTO sumvendr
FROM TRANSACCOES t
JOIN ARTIGOS a
ON a.ID_ARTIGO = t.ID_ARTIGO
WHERE id_user = a.ID_VENDEDOR
AND t.ELIMINADO = 0
AND t.FEEDBACK_VENDEDOR >= 0;
IF (sumvendr IS NULL) THEN
sumvendr := 0;
END IF;
IF (sumcompr IS NULL) THEN
sumcompr := 0;
END IF;
sumvendr := sumvendr + sumcompr;
f := (sumvendr*100);
f1 := f/counter;
UPDATE utilizadores SET classificacao = f1 WHERE id_utilizador = id_user;
RETURN f1;
END;
找到了解决我问题的办法。我在测试这个功能,从一个用户那里买了很多东西,但是卖家只卖出了一个。因此,当我删除购买时,我删除了卖家的唯一卖出。因此,由于该函数没有阻止用户最后一次销售/购买,因此它得到了该错误。因为当它重新计算时,它会重新计算参与事务的两个用户的反馈。删除第一个查询后,我不满意,因此计数变为0@Srinivas我知道这一点,但不明白为什么它在移除后立即返回零。因为,当我以后运行它时,它会工作。@ferozakbar你能说得更具体一点吗?因为如果我在删除方法完成后运行该函数,它就会工作。谢谢,正如前面所说的,问题出在这一行f/计数器上,可能在删除您的id之后,Transacco只停留在元素设置为已删除的行上。因此,使计数器=0。