How to handle divide by zero in Oracle function

doc*_*doc 2 oracle function fetch divide-by-zero

I'm getting a divide by zero error when I use this function. It compiles fine. Since I'm not using a select statement I'm assuming NULLIF isn't going to work. What can I use to avoid the divide by zero issue?

    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);
Run Code Online (Sandbox Code Playgroud)

Kau*_*yak 5

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

用一个CASE

IP_rec_calc := CASE IO_factor_calc WHEN 0 then 0 --whatever you want 
                    ELSE +(IN_highest_gpa_calc/IO_factor_calc) 
                    END;
Run Code Online (Sandbox Code Playgroud)

zero_divide异常处理程序

EXCEPTION
 WHEN zero_divide then
    dbms_output.put_line('Division by Zero happened .');
IP_rec_calc := 0; --whatever you want 
Run Code Online (Sandbox Code Playgroud)