1. ホーム
  2. sql

[解決済み] ORA-01476: SQLクエリで「除数が0に等しい」(Oracle 10g)。

2022-03-04 15:32:34

質問

私は、Oracle 10gの下でSQLクエリを作成している、結果は私にそのような何かを与える必要があります。

----------------------------------------------------------------------------------
TEXT         VALUE1        VALUE2          VALUE3               VALUE4
---------------------------------------------------------------------------------
TEXT1        8795           5684        value1-value2          value3/value2*100
TEXT2        235             568            ...                   ...
TEXT3        125             23             ...                   ...
TEXT4        789             58             ...                   ...
TEXTN         0               0             ...                   ...

VALUE4 カラムを計算しようとすると、このエラーが発生します。

ORA-01476: le diviseur est égal à zéro
01476. 00000 -  "divisor is equal to zero"
*Cause:    
*Action:

試してみた DECODE 関数でも同じエラーが発生します。 CASE

注:VALUE1, VALUE2, VALUE3, VALUE4 は計算されたカラムで、VALUE1 = sum(col1)+sum(col2)... と他の VALUE2 カラムも同じです。

ありがとうございます。

解決方法は?

すべては、ある値が無限になる場合に計算したいのか、そうでない場合に計算したいのかによります。これらの特殊なケースを無視して、以下のように余りを計算することができます。 ゴードンの答え で提案しています。

case when value2 <> 0 then value3 / value2 * 100 end

また、それらを無視したい場合は、以下のようにします。 NULLIF() を使用すると、値をNULLに変更し、何も計算しないようになります。

value3 / nullif(value2, 0) * 100

これが計算されたカラムであることが問題を引き起こすというあなたの主張が理解できないのですが。もしこれが仮想カラムであれば、テーブルが作成されることはないでしょう。 ドキュメント 仮想カラムは他のカラムを名前で参照することはできません。

仮想カラムでない場合は、通常通りselect文の中で行います。