У меня период = 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
кто-нибудь знает, как решить эту проблему? Спасибо заранее!
Предполагая :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 днями тоже. Вы их считали?
period=3day
? Вы не можете конвертировать 33day
в число, это дает ошибку конвертации.