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

Javascript 处理验证时出错。ORA-06502:PL/SQL:数字或值错误:字符到数字转换错误,javascript,oracle,jquery,oracle11g,oracle10g,Javascript,Oracle,Jquery,Oracle11g,Oracle10g,我有周期=3天/周/月、开始日期和结束日期。当我选择开始日期时,例如2013年12月12日。。然后我想验证一个结束日期是否在开始日期+期间(3day)+2day(默认值)附近。。因此,截止日期为2013年12月16日。。我在这里写了代码 declare v_period date; begin if :P104_TYPE_PERIOD = 'DAY' then v_period := ((TO_DATE(:P104_START_DATE, 'DD-MON-YYYY')+(nvl(to_n

我有周期=3天/周/月、开始日期和结束日期。当我选择开始日期时,例如2013年12月12日。。然后我想验证一个结束日期是否在开始日期+期间(3day)+2day(默认值)附近。。因此,截止日期为2013年12月16日。。我在这里写了代码

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;
有人知道如何解决这个问题吗?
提前谢谢

假设
:P104_COURSE_PERIOD
是一个
数字

您的块将逗号替换为零,如果它是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;
声明
v_期间日期;
v_日期_偏移量_系数编号;
开始
如果:P104\u类型\u期间='天',则
v_日期_偏移系数:=1;
ELSIF:P104_类型_周期=‘周’然后
v_日期_偏移系数:=7;
ELSIF:P104_类型_期间=‘月’然后
v_日期_偏移系数:=30;
如果结束;
期间:=截止日期(:P104开始日期,'DD-MON-YYYY')+(:P104课程期间*v日期偏移系数)+2;
如果v期<截止日期(:P104结束日期,'DD-MON-YYYY'),则
返回false;——你还东西吗?
如果结束;
例外情况
当其他人
dbms|u output.put|u line(SQLERRM | | chr(10)| | dbms|u utility.format|u error|u backtrace);
结束;
请尝试上面的PL/SQL

需要注意的是:
你把日期乘以30,我猜你会做一些月份计算,但也有28天和31天的月份。你考虑过了吗?

代码>句号=3d< <代码>?您无法将
3day
转换为数字,这会导致转换错误。实际上,我使用的3day是不同的项。。P104课程周期=3 P104类型周期=天。。这就是为什么我放在那里,如果:P104类型周期='MONTH',那么v周期:=((到日期(:P104开始日期,'DD-MON-YYYY')+(到字符(到字符号(替换(:P104课程周期,'0')),0)*30)+2);如果结束;请先打印开始块中以“:”开头的所有主机变量,并向我们显示输出结果
   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;