Вопрос

Я построил небольшой инструмент запросов для 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'; А потом повторно запустите свой неверный запрос - должно работать там тоже.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top