Клиент, скомпилированный с помощью OCI: 10.2.0.4.0
Сервер: Oracle9i Enterprise Edition Release 9.2.0.4.0
Проблемный запрос:
SELECT CODIGO FROM LOG WHERE TEL = :telnumber AND DATE_PROC = '05-JUL-08'
Описание таблицы:
SQL>describe LOG;
TEL NOT NULL VARCHAR2(15)
CODIGO NOT NULL VARCHAR2(20)
DATE_PROC NOT NULL DATE
Как бы просто это ни выглядело, при выполнении непосредственно на сервере с помощью SQLPlus он возвращает результат, но при выполнении из приложения, использующего OCI, этот запрос возвращает OCI_NO_DATA
всегда. Вначале значение даты также было заполнителем, но я обнаружил, что даже использование литерала вроде '05-JUL-08'
не работает. Я пробовал следующее:
- Я пробовал основы: запрос БД от клиента работает. Это то, что доставляет мне неприятности
Работает следующее:
SELECT CODIGO FROM LOG WHERE TEL = :telnumber
Выполнение
ALTER SESSION SET NLS_DATE_FORMAT="DD-MM-YYYY";
перед запросом как на сервере, так и на клиенте. Тот же результат: сервер возвращает данные, клиентOCI_NO_DATA
- Попытался изменить формат
DATE_PROC
, объединив это с использованиемTO_DATE()
. Тот же результат. - Искал, искал, искал. Нет ответа
Я немного отчаянно пытаюсь найти ответ, буду признателен за любую помощь и могу предоставить столько дополнительной информации, сколько необходимо. Спасибо.
--- Дополнительная информация ---
update log set DATE_PROC = TO_DATE('20080705162918', 'YYYYMMDDHH24MISS') where CODIGO='BancoOne';
Я пробовал разные комбинации, используя trunc() и "изменить набор сеансов nls_date_format"... и вот что я получаю:
SELECT CODIGO FROM LOG WHERE TEL = 11223344 AND DATE_PROC = TO_DATE('20080705162918', 'YYYYMMDDHH24MISS');
На сервере: возвращает: "BancoOne" (хорошее значение)
В приложении OCI: возвращает OCI_NO_DATA
SELECT CODIGO FROM LOG WHERE TEL = 11223344 AND trunc(DATE_PROC) = TO_DATE('20080705', 'YYYYMMDD');
На сервере: возвращает: "BancoOne"
В приложении OCI: возвращает "BancoOne"
Итак, дело в том, почему приложение OCI дает разные результаты, если оба обращаются к одному и тому же серверу БД?
Кроме того, чтобы уточнить цель приложения OCI: у него есть запрос, который должен быть настроен пользователем. Идея состоит в том, что пользователь адаптирует запрос по своему желанию, чтобы он соответствовал полю даты, присутствующему в целевой БД, поэтому я не должен включать в свой код операторы «изменить набор сеансов nls_date_format», так как я не буду знать формат даты. Таким образом, я хочу предоставить пользователю гибкость и не полагаться на определенные форматы даты. Имеет ли это смысл? Какие-либо предложения?