处理验证时出错。 ORA-06502:PL / SQL:数字或值错误:字符到数字转换错误

时间:2013-12-24 13:32:50

标签: javascript oracle jquery oracle11g oracle10g

我有句号= 3day /周/月,start_date和end_date。当我为例如选择start_date时。 12-DEC-2013 ..然后我想验证end_date是在start_date + period(3day)+ 2day(默认)...所以end_date将是16-DEC-2013 ..我在这里写了代码..

declare

v_period date;

begin

if :P104_TYPE_PERIOD = 'DAY' then
v_period  := ((TO_DATE(:P104_START_DATE, 'DD-MON-YYYY')+(nvl(to_number(replace(:P104_COURSE_PERIOD,',', '0'))),0)))+2);
end if;

if :P104_TYPE_PERIOD = 'WEEK' then
v_period  := ((TO_DATE(:P104_START_DATE, 'DD-MON-YYYY')+(nvl(to_char(to_number(replace(:P104_COURSE_PERIOD,',', '0'))),0)*7))+2);
end if;

if :P104_TYPE_PERIOD = 'MONTH' then
v_period  := ((TO_DATE(:P104_START_DATE, 'DD-MON-YYYY')+(nvl(to_char(to_number(replace(:P104_COURSE_PERIOD,',', '0'))),0)*30))+2);
end if;

if v_period  < :P104_END_DATE then
return false;
end if; 
end;

运行页面后,会显示以下消息:

Error processing validation.
ORA-06502: PL/SQL: numeric or value error: character to number conversion error

有谁知道如何解决这个问题? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

假设:P104_COURSE_PERIODNUMBER;

您的广告正在用0替换逗号,如果 a NUMBER,您是否可以提供可能的值。

   declare
        v_period date;
        v_date_offset_factor NUMBER;
    begin
        if :P104_TYPE_PERIOD = 'DAY' then
            v_date_offset_factor := 1;
        ELSIF :P104_TYPE_PERIOD = 'WEEK' then
            v_date_offset_factor := 7;
        ELSIF :P104_TYPE_PERIOD = 'MONTH' then
            v_date_offset_factor := 30;
        END IF;
        v_period  := TO_DATE(:P104_START_DATE, 'DD-MON-YYYY') + (:P104_COURSE_PERIOD * v_date_offset_factor ) + 2;
        if v_period  < TO_DATE(:P104_END_DATE,'DD-MON-YYYY') then
            return false; -- Do you return something?
        end if; 
    EXCEPTION
    WHEN OTHERS THEN
        dbms_output.put_line( SQLERRM||chr(10)||dbms_utility.format_error_backtrace );
    end;

请尝试以上PL / SQL

需要注意: 你将日期乘以30,我猜你做了一个月的计算,但也有28个月和31天的月份。你有没有考虑过他们?