Ошибка обработки проверки. ORA-06502: PL / SQL: ошибка числа или значения: ошибка преобразования символа в число

0

У меня период = 3day/week/month, 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

кто-нибудь знает, как решить эту проблему? Спасибо заранее!

  • 0
    period=3day ? Вы не можете конвертировать 3 3day в число, это дает ошибку конвертации.
  • 0
    на самом деле в тот день я использовал другой элемент .. P104_COURSE_PERIOD = 3 P104_TYPE_PERIOD = DAY ... вот почему я положил туда,
Показать ещё 8 комментариев
Теги:
oracle11g
oracle10g

1 ответ

0

Предполагая :P104_COURSE_PERIOD - NUMBER;

Ваш блок заменял запятые нулем, можете ли вы предоставить возможные значения, если он НЕ 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 днями тоже. Вы их считали?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню