Клиент, скомпилированный с OCI: 10.2.0.4.0
Сервер: Oracle9i Enterprise Edition, выпуск 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 () и "alter session set 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: у него есть запрос, который должен быть настроен пользователем. Идея состоит в том, что пользователь будет адаптировать запрос по своему усмотрению, чтобы он соответствовал полю Date, присутствующему в целевой БД, поэтому я не должен включать в свой код операторы «alter session set nls_date_format», поскольку я не буду знать формат даты. Таким образом, я хочу предоставить пользователю гибкость и не полагаться на конкретные форматы даты. Имеет ли это смысл? Есть предложения?