Oraclecommand, кажется, преобразует литеральные даты
-
02-10-2019 - |
Вопрос
Я построил небольшой инструмент запросов для Oracle, используя Oraclecommand и OracledataAdapter. Пользователи просто вводят полный запрос (без параметров), execute и результаты отображаются в DataGridView. Пока так хорошо, хотя я попробовал неверный запрос, например:
SELECT * FROM mytable WHERE dateColumn = '1-JAN-10'
Этот запрос не является действительным SQL для Oracle. Вы должны использовать функцию to_date () для сравнения с литералами даты. SQL Developer также отвергает его, но как-то мой запрос инструмент просто работает. Значит ли это, что мой Oraclecommand - это немного волшебника здесь, или я делаю что-то не так? Также есть ли способ опустить это поведение, потому что цель инструмента - это тестирование запросов, которые должны работать всегда ...
Спасибо
Решение
Запрос может быть действителен для Oracle. Вам не нужно использовать to_date()
Если вы дадите строку даты в формате даты вашего сеанса, хотя все же лучше сделать это в любом случае, чтобы избежать таких проблем.
Похоже, у вас есть другой NLS_DATE_FORMAT
В среде вашего инструмента к тому, что в SQL Developer или формат даты сеанса неявно устанавливается неявно на Oraclecommand.
Ты сможешь select value from nls_session_parameters where parameter = 'NLS_DATE_FORMAT'
Чтобы увидеть, что это от SQL * PLUS и SQL Developer, и из вашего инструмента; и из nls_database_parameters
Чтобы увидеть, что переопределяет база данных по умолчанию.
Похоже, ваш инструмент может иметь DD-MON-RR
И вы ожидаете какой-то другой формат в другом месте, но, не проверяя те таблицы, сложно сказать, где вы используете база данных по умолчанию и где вы переоцениваете его на уровне сеанса. Я догадаюсь, что это DB по умолчанию, и у вас есть переопределение в других условиях.
От разработчика SQL попробуйте alter session set nls_date_format='DD-MON-RR';
А потом повторно запустите свой неверный запрос - должно работать там тоже.