oracle - TO_CHAR 在存储过程中没有正确比较
问题描述
我正在使用 Oracle,我需要在需要的地方执行一些数学计算TO_CHAR()
。
但它不是比较值。
这是下面的示例。
IF TO_CHAR(V_APP_FAIR_RENT, '99,9999') > TO_CHAR(v_ACT_RENTAMT, '99,9999')
THEN
V_HIGHER_RENT_PREMIUM := 0;
dbms_output.put_line('Higher Rental premium 0 :' || V_HIGHER_RENT_PREMIUM);
ELSE
V_HIGHER_RENT_PREMIUM := v_ACT_RENTAMT / V_AMTINMONTH;
V_HIGHER_RENT_PREMIUM := V_HIGHER_RENT_PREMIUM * V_NOOFDAYSINMONTH;
V_HIGHER_RENT_PREMIUM := V_HIGHER_RENT_PREMIUM - V_APP_FAIR_RENT;
V_HIGHER_RENT_PREMIUM := ROUND(V_HIGHER_RENT_PREMIUM / V_NOOFOPCO);
dbms_output.put_line('Higher rental premium 1 :' || V_HIGHER_RENT_PREMIUM);
END IF;
两个比较的值如下。
V_APP_FAIR_RENT
=7455
和v_ACT_RENTAMT
=10928
从技术上讲,与上述比较相比,它应该处于 IF 状态,但实际上它处于 ELSE 状态。
请建议我哪里出错了。
解决方案
如果您说您的原始列是字符串(为什么?),并且您的示例似乎不包含组或十进制字符,那么为什么不使用具有默认格式的 to_number 来比较数值?
IF to_number(V_APP_FAIR_RENT) > to_number(V_ACT_RENTAMT)
THEN
V_HIGHER_RENT_PREMIUM := 0;
dbms_output.put_line('Higher Rental premium 0 :' || V_HIGHER_RENT_PREMIUM);
ELSE
V_HIGHER_RENT_PREMIUM := v_ACT_RENTAMT / V_AMTINMONTH;
V_HIGHER_RENT_PREMIUM := V_HIGHER_RENT_PREMIUM * V_NOOFDAYSINMONTH;
V_HIGHER_RENT_PREMIUM := V_HIGHER_RENT_PREMIUM - V_APP_FAIR_RENT;
V_HIGHER_RENT_PREMIUM := ROUND(V_HIGHER_RENT_PREMIUM / V_NOOFOPCO);
dbms_output.put_line('Higher rental premium 1 :' || V_HIGHER_RENT_PREMIUM);
END IF;