Samotek
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Oracle 10.2.0.3, DOA 4.1.1 Delphi 2007. Делаю в TOracleQuery такой запрос(sp.GetSubjName = deterministic функция из моего пакета) (запрос вытащен Statement Tracerom и одинаково с программой работает(или не работает) в PLSql Developer): SELECT wd.fromsubjid, sp.GetSubjName(wd.fromsubjid) FROMSUBJNAME, bd.docdate BILLDOCDATE FROM WAYITEM wi LEFT OUTER JOIN WAYDOC wd on wi.waydocid = wd.id LEFT OUTER JOIN BILLDOC bd on wd.billdocid = bd.id LEFT OUTER JOIN BILLRIT br on br.regrepairobjnr = wi.repairobjnr WHERE (wi.objtypeid in (1,7,8)) AND (wi.id <> NVL(wi.nodeitemid,0)) AND (((wd.supplydate >= TO_DATE('01.02.2010 00:00:00','dd.mm.yy hh24:mi:ss')) and (wd.supplydate <= TO_DATE('03.03.2010 00:00:00','dd.mm.yy hh24:mi:ss')))) AND (wd.doctypeid in (2,3)) AND (wd.firmactid in (1)) В некоторых возвращаемых записях в поле wd.fromsubjid, которое может быть только целым числом или NULL(проверено сто пудов(да с него есть внешний ключ на другую таблицу)) возвращается -1,01E126. Если из запроса убрать поле bd.docdate, то все нормально. Если сделать условие например на день, в который сбойная запись, то все нормально со всеми полями для этой и других записях. Если в TOracleQuery установить ReadBuffer = 1(получать по одной записи), то при любых условиях все нормально. Если убрать deterministic, то то-же все нормально при любом условии. Но эта функция прекрасно работает в других запросах. Еще обнаружил если в отладчике в Delphi в функции при чтении значения плохого поля из буфера по его укозателю заставить определять тип этого поля как integer, то оно прочтется правильно! Я понимаю, что все путано изъяснил, но я сам логику не пойму: OCI? Delphi? DOA? План запроса? Уж извините. Может кто натыкался? Может подскажите куда копать? |