|
![]() |
#1 |
Member
|
Наблюдал похожий глюк именно на Oracle (на MS SQL не удалось тогда воспроизвести).
Запрос был простенький типа select currency where currency.CurrencyCode == "XXXY" Когда в качестве кода валюты передавался код несуществующей валюты длиной в 4 символа (тестировалась проверка на некорректное значение валюты при импорте из другой системы), то возвращалась запись, код которой совпадал с первыми тремя символами неправильного кода. Ожидалось же, что запись не вернется и система выругается. Дальше из-за этого получался какой-то конфуз. Т.е. в режиме FORCEPLACEHOLDERS Oracle как-то умудрялся резать значение переменной, и в запрос уходило уже не то значение, которое запрашивалось, а подрезанное. select forceliterals currency where currency.CurrencyCode == "XXXY" Дал ожидаемый результат (ничего не вернул). Возможно, и в вашем случае можно поближе докопаться до причины.
__________________
С уважением, glibs® |
|
![]() |
#2 |
Участник
|
Цитата:
Либо возможно глюк в этом и состоял, что из неправильного кода путем усечения в условии currency.CurrencyCode == "XXXY" на месте "XXXY" стояла переменная со значением "ХХХ" - но это уже глюк программиста X++ ![]() |
|
![]() |
#3 |
Member
|
Цитата:
Сообщение от Logger
...
Запрос наверно как Query был составлен ? ... Цитата:
Сообщение от Logger
...
но это уже глюк программиста X++ ...
__________________
С уважением, glibs® |
|
![]() |
#4 |
Участник
|
Цитата:
Сообщение от glibs
![]() Нет.
Я тестировал на джобе. Иначе фиг такое отловишь. В условии писал строку, а не переменную. Это какая-то особенность Ораклиного движка. Код валюты в БД определен как трехсимвольная строка. И при placeholders, видать, он режет input. Если это знать и учесть, то в принципе не проблема. Просто нужно знать. Мне кажется что когда указываешь константу он просто приводит её неявным преобразованием типов к нужной длине, как например при присваивании строковых переменных с разной длиной. |
|
![]() |
#5 |
Участник
|
Цитата:
Цитата:
Сообщение от gl00mie
Был аналогичный косяк, правда, на Oracle с его NSL_LOWER(), SUBSTR() и прочими функциями. В частности, при работе с Oracle из строковых полей вырезаются подстроки длины EDT. Так вот, пытался я join'ить по InventTrans.TransRefId = InventJournalTable.JournalId, и тоже ничего не работало; дело оказалось в том, что у EDT JournalId и InventTransRefId разная длина, в результате на СУБД уходил запрос вида
PHP код:
Последний раз редактировалось petergunn; 10.11.2008 в 17:51. |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|