PL/SQL 除以零

问题描述 投票:0回答:1

我在尝试运行此语句时遇到问题,并出现错误 ORA-01476:除数等于零。我检查了用于除以的值并放入 case 语句中以检查它是否为零则不继续,但我仍然收到错误。

 SELECT ir.contract as Site, ir.purchase_group,
 ir.purchase_group_description, ir.current_quarter,
 Sum(Nvl(ir.avg_price_paid_by_part_prev_year_q4,0)) test,
 Sum(Nvl(ir.avg_price_paid_by_part_q1,0)) test1   , Case When (
 Sum(Nvl(ir.avg_price_paid_by_part_prev_year_q4,0)) = 0 or
 Sum(Nvl(ir.avg_price_paid_by_part_q1,0)) = 0 ) Then 0 Else   
 Round(Sum(     case when Nvl(ir.avg_price_paid_by_part_prev_year_q4,0)
 = 0 then NULL else 
                    case when  (100-( ir.avg_price_paid_by_part_q1 / Nvl(ir.avg_price_paid_by_part_prev_year_q4,0) )*100) = 100 then 0 Else
                round(((100-( ir.avg_price_paid_by_part_q1 / Nvl(ir.avg_price_paid_by_part_prev_year_q4,0) )*100) *-1),4) end end )
 
                
                / Sum(Case When round(((100-( ir.avg_price_paid_by_part_q1 /
 Nvl(ir.avg_price_paid_by_part_prev_year_q4,0) )*100) *-1),4) != 0 then
 1 Else 0 End ),4)
         End       avg_price_paid_by_part_q1_change_perc --,
        
      
     FROM ifsinfo.inflation_report_qr ir   where ir.contract  = 'NOPG'   Group by ir.contract, ir.purchase_group,
 ir.purchase_group_description, ir.current_quarter

任何人都可以帮忙吗? 预先感谢。

oracle plsql divide-by-zero
1个回答
0
投票

该查询中有 4 个除法运算。

您明确表示:如果列值不存在(即它是

NULL
,请将其替换为零
0
),例如

/ NVL (ir.avg_price_paid_by_part_prev_year_q4, 0)
       --------------------------------------  -
       if this is NULL, then divide by ......  zero

你真的想这么做吗?如果没有,您期望结果是什么?

也许您会很高兴除以一个非常大的数并得到接近于零的结果。这就是你现在拥有的:

SQL> select 125 / nvl(&par_number, 0) result from dual;
Enter value for par_number: null
select 125 / nvl(null, 0) result from dual
           *
ERROR at line 1:
ORA-01476: divisor is equal to zero

这是一个非常小的数字

SQL> select 125 / nvl(&par_number, 1E99) result from dual;
Enter value for par_number: null

    RESULT
----------
1,2500E-97

SQL>

或者,也许你根本不想得到任何结果;在这种情况下,请删除所有

NVL

SQL> select 125 / &par_number result from dual;
Enter value for par_number: null

    RESULT
----------
                 <-- this is a NULL

基本上,这取决于您想要得到什么。只是不要除以零,这是不允许的。

© www.soinside.com 2019 - 2024. All rights reserved.