首页 > 解决方案 > 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=7455v_ACT_RENTAMT=10928

从技术上讲,与上述比较相比,它应该处于 IF 状态,但实际上它处于 ELSE 状态。

请建议我哪里出错了。

标签: oraclestored-proceduresto-char

解决方案


如果您说您的原始列是字符串(为什么?),并且您的示例似乎不包含组或十进制字符,那么为什么不使用具有默认格式的 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;

推荐阅读