Вы вызываете TO_DATE( date_string, format_model )
с DATE
(не String), что заставляет Oracle выполнить неявное преобразование DATE
в VARCHAR2
, используя параметр сеанса NLS_DATE_FORMAT
в качестве модели формата, просто так Вы можете преобразовать его обратно в DATE
.
Итак, запрос:
TO_DATE(CURRENT_DATE,'MM/DD/YYYY')
Эффективно:
TO_DATE(
TO_CHAR(
CURRENT_DATE,
( SELECT VALUE FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT' )
),
'MM/DD/YYYY'
)
Если NLS_DATE_FORMAT
соответствует MM/DD/YYYY
, тогда ваш запрос будет работать - формат не совпадает, поэтому он не работает.
То, что вам следует делать, - это не использовать TO_DATE
для типа данных DATE
- это уже DATE
, поэтому вам не нужно.
declare
date_value char(10) := TO_CHAR( CURRENT_DATE, 'DD.MM.YYYY' );
week_value pls_integer := TO_NUMBER(TO_CHAR(CURRENT_DATE,'WW'));
start_date_value char(10) := TO_CHAR(TRUNC(CURRENT_DATE, 'IW'),'DD.MM.YYYY');
end_date_value char(10) := TO_CHAR(NEXT_DAY(TRUNC(CURRENT_DATE,'IW'),'SUNDAY'),'DD.MM.YYYY');
begin
htp.p('<< '||'Week'|| week_value ||' >> '|| start_date_value ||' - '|| end_date_value);
end;