Дата Oracle и настройки NLS
Вопрос
Я получаю исключение ORA-01858. Я думаю, что это связано с настройками и датой NLS:
declare
currentDate DATE := sysdate;
queryString VARCHAR2(300) := '... where blablabla = :bind_timestamp ...';
sql_cursor integer;
begin
sql_cursor := dbms_sql.open_cursor;
dbms_sql.parse(sql_cursor, queryString, dbms_sql.native);
dbms_sql.bind_variable(sql_cursor, ':bind_timestamp', currentDate);
rowsProcessed := dbms_sql.execute(sql_cursor);
dbms_sql.close_cursor(sql_cursor);
end;
Является dbms_sql.bind_variable(sql_cursor, ':bind_timestamp', currentDate);
NLS зависит?
Я имею в виду, что с некоторыми настройками NLS он работает нормально, а другие - терпимость?
Решение
При работе с датами настройки NLS не соответствуют актуальности, если вы предоставляете свою собственную строку формата:
WHERE arrival=TO_DATE('2011-09-05', 'yyyy-mm-dd')
Я предполагаю, что вы полагаетесь на автоматическое жонглирование типами, то есть вы предоставляете строку и позволяете Oracle отбрасывать ее на сегодняшний день по мере необходимости:
WHERE arrival='05/09/2011'
В этом случае Oracle использует формат по умолчанию, как указано в ваших настройках NLS.
Обновлять: Кстати, ORA-01858 Код означает:
не нулечный персонаж, найденный там, где ожидалась цифра