获取java.sql.SQLDataException:ORA-01476:在计算选择数时,divisor等于零

时间:2013-01-05 04:53:14

标签: java sql oracle

我正在使用Java访问Oracle数据库。

我创建了一个SQL函数,根据他的交易(购买或销售)计算用户的反馈。

反馈值存储在表TRANSACCOES中。当我更新反馈列时,该功能正常工作,但是当我在“删除”之后立即重新计算反馈时(我没有真正删除它,只需设置一个标记为删除)我收到错误:ORA-01476: divisor is equal to zero. < / p>

如果在该错误之后我对另一个事务进行更新,则重新计算就好了。所以我不知道为什么会这样。

这是功能:

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;

1 个答案:

答案 0 :(得分:0)

找到解决我问题的方法。我正在通过用户的许多购买测试该功能,但卖家只有卖出。因此,当我删除购买时,我删除了卖家的唯一卖出。因此,由于该功能并未阻止作为用户的最后一次销售/购买的事实,因此它得到了该错误。因为在重新计算时,它会重新计算交易中涉及的两个用户的反馈。