Показать сообщение отдельно
Старый 10.11.2008, 17:46   #11  
petergunn is offline
petergunn
Участник
 
118 / 274 (10) ++++++
Регистрация: 30.08.2005
Адрес: Tyumen
Цитата:
Сообщение от Logger Посмотреть сообщение
Хм. Любопытно.
Мне кажется что когда указываешь константу он просто приводит её неявным преобразованием типов к нужной длине, как например при присваивании строковых переменных с разной длиной.
В этой ветке Непонятка с exist join-ом... пост gl00mie практически объясняет такое поведение запроса на движке Oracle.

Цитата:
Сообщение от gl00mie
Был аналогичный косяк, правда, на Oracle с его NSL_LOWER(), SUBSTR() и прочими функциями. В частности, при работе с Oracle из строковых полей вырезаются подстроки длины EDT. Так вот, пытался я join'ить по InventTrans.TransRefId = InventJournalTable.JournalId, и тоже ничего не работало; дело оказалось в том, что у EDT JournalId и InventTransRefId разная длина, в результате на СУБД уходил запрос вида

PHP код:
WHERE SUBSTR(NLS_LOWER(A.TransRefId),1,20)=SUBSTR(NLS_LOWER(B.JournalId),1,10
Похоже что начиная с 4.0 для управления таким поведением ввели опцию "Include SUBSTR and LOWER in all SELECT statements to support Oracle mixed-case systems" в Autogeneration Options конфигурационной утилиты сервера AOS:
Изображения
 

Последний раз редактировалось petergunn; 10.11.2008 в 17:51.