如何在Oracle函数中处理被零除

时间:2019-01-29 16:22:46

标签: oracle function fetch divide-by-zero

使用此功能时,出现除以零的错误。它编译良好。由于我没有使用select语句,所以我假设NULLIF无效。 我该如何避免被零除的问题?

    OPEN GET_DATA;
    fetch GET_DATA into v_gpa_hsch,v_gpa_hsch_scale,v_gpa_scale,v_gpa,
     v_gpa_recalc,v_gpa_hsch_recalc;
    IF GET_DATA%NOTFOUND
    THEN
    IT_final_final_calc :=0;

    ELSE
            IF  v_gpa_hsch_scale < v_gpa_scale
            THEN IL_higher_scale_calc := v_gpa_scale;
            ELSE IL_higher_scale_calc := v_gpa_hsch_scale;
            END IF;

            IF v_gpa_hsch < v_gpa
            THEN IM_gpa_calc := v_gpa;
            ELSE IM_gpa_calc := v_gpa_hsch;
            END IF;

            IF IM_gpa_calc > IL_higher_scale_calc
            THEN IN_highest_gpa_calc := IL_higher_scale_calc;
            ELSE IN_highest_gpa_calc := IM_gpa_calc;
            END IF;

            IO_factor_calc := (IL_higher_scale_calc/4);

            --I PRESUME THE FOLLOWING LINE IS THE ISSUE:
            IP_rec_calc := +(IN_highest_gpa_calc/IO_factor_calc);

5 个答案:

答案 0 :(得分:4)

您可以根据需要使用这两个选项,

使用json

CASE

IP_rec_calc := CASE IO_factor_calc WHEN 0 then 0 --whatever you want ELSE +(IN_highest_gpa_calc/IO_factor_calc) END; 异常处理程序

zero_divide

答案 1 :(得分:4)

您不需要查询即可使用NULLIF,也可以在PL / SQL中使用它:

IP_rec_calc := IN_highest_gpa_calc / NULLIF(IO_factor_calc, 0);

这甚至是处理这种情况的非常典型的方法。除以零的结果是不确定的,因此我们将其设为空。

答案 2 :(得分:2)

您正在使用编程语言。因此,它具有以下条件:

IF IO_factor_calc = 0 THEN
  IP_rec_calc := 0;
ELSE
  IP_rec_calc := IN_highest_gpa_calc / IO_factor_calc;
END IF;

您可以在IF和ELSE块中放置更多代码,以备进行一些日志记录之类。

答案 3 :(得分:1)

当IO_factor_calc = 0时,您想要什么结果?你可以做例如

import matplotlib
print(matplotlib.__version__)
import matplotlib.pyplot as plt


sorted_list = [(0.0017821837085763366, 'Activity'),
 (0.002649111136700579, 'PeakAccel'),
 (0.012697214182994502, 'VerticalPeak'),
 (0.014534726412631642, 'ROGState'),
 (0.016099772399198357, 'VerticalMin'),
 (0.022745210003295983, 'LateralPeak'),
 (0.028845102569277088, 'SagittalPeak'),
 (0.029479112475744584, 'LateralMin'),
 (0.04062328177704225, 'BR'),
 (0.08653071485979484, 'SagittalMin'),
 (0.09011618483921582, 'Posture'),
 (0.13598729040097057, 'HRV'),
 (0.22986192060475388, 'ROGTime'),
 (0.28804817462980353, 'HR')]

features_sorted = []
importance_sorted = []

for i in sorted_list:
    features_sorted += [i[1]]
    importance_sorted += [i[0]]

plt.title("Feature importance", fontsize=15)
plt.xlabel("Importance", fontsize=13)

plt.barh(features_sorted, importance_sorted, color="green", edgecolor='green')
plt.show()

答案 4 :(得分:0)

我已经习惯了这个:

IP_rec_calc := DECODE(IO_factor_calc, 0,NULL, IN_highest_gpa_calc / IO_factor_calc);
相关问题