Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SQL, like & '%' [D6]


DeepGray ©   (2004-08-04 13:26:00) 

Нужен совет. Задача такова:
Есть SQL-скрипт

SELECT * FROM DOVIDNYK A, VYMIR B WHERE A.CODE_V=B.CODE_VYMIRU
AND KLASS_CODE LIKE ':kod'
AND TO_CHAR (OBLIK_NUMB) LIKE ':num'
AND ((UPPER (LONG_NAME) LIKE UPPER (':lname')) OR (UPPER SHORT_NAME) LIKE UPPER (':sname')))
AND UPPER (TYPE_P) LIKE UPPER (':tip')
AND UPPER (MARKA) LIKE UPPER (':marka')
AND UPPER (SORT_P) LIKE UPPER (':sort')
AND UPPER (RAZMER) LIKE UPPER (':razmer')
AND UPPER (KRESLENNYA) LIKE UPPER (':chert')
AND UPPER (TU) LIKE UPPER (':tu')
AND UPPER (GOST) LIKE UPPER (':gost')

ORDER BY KLASS_CODE

если необходимо, то я присваиваю соответствующему параметру значение, если по этому параметру отбирать данные не надо, то параметру присваиваю '%'.
Запрос отрабатывается не правильно (IsEmpty=true, хоть я знаю что это не так).
Начинаю искать ошибку и получаю интерестный результат. После удаления выделенных строк всё работает. Добавляю по одной строке, каждый раз удаляя прошлую - со всеми (по одной) работает.
Например,

SELECT * FROM DOVIDNYK A, VYMIR B WHERE A.CODE_V=B.CODE_VYMIRU
AND KLASS_CODE LIKE ':kod'
AND TO_CHAR (OBLIK_NUMB) LIKE ':num'
AND ((UPPER (LONG_NAME) LIKE UPPER (':lname')) OR (UPPER SHORT_NAME) LIKE UPPER (':sname')))
AND UPPER (TYPE_P) LIKE UPPER (':tip')

или

SELECT * FROM DOVIDNYK A, VYMIR B WHERE A.CODE_V=B.CODE_VYMIRU
AND KLASS_CODE LIKE ':kod'
AND TO_CHAR (OBLIK_NUMB) LIKE ':num'
AND ((UPPER (LONG_NAME) LIKE UPPER (':lname')) OR (UPPER SHORT_NAME) LIKE UPPER (':sname')))
AND UPPER (TU) LIKE UPPER (':tu')

и т.д.
Опять добавляю все строки вместе - не работает. Подскажите пожалуйста, где я допускаю ошибку.


roottim   (2004-08-04 13:49:00) [1]

сделай свой запрос в sqlplus(но удобнее в plsqldev) вместо параметров явные значения. А затем предоставь результат.
> хоть я знаю что это не так
на каком основании ты это знаешш.. вроде-бы или как-бы


DeepGray   (2004-08-04 13:36:00) [2]

Млин. Вот что значит не использовать Кнтрл-Ц и Кнтрл-В.
Фрагменты кода содержат ошибку.
Вот те коды, к-рые у меня в исходнике:

Код1.
SELECT * FROM DOVIDNYK A, VYMIR B WHERE A.CODE_V=B.CODE_VYMIRU
AND KLASS_CODE LIKE :kod
AND TO_CHAR (OBLIK_NUMB) LIKE :num
AND ((UPPER (LONG_NAME) LIKE UPPER (:lname)) OR (UPPER SHORT_NAME) LIKE UPPER (:sname)))
AND UPPER (TYPE_P) LIKE UPPER (:tip)
AND UPPER (MARKA) LIKE UPPER (:marka)
AND UPPER (SORT_P) LIKE UPPER (:sort)
AND UPPER (RAZMER) LIKE UPER (:razmer)
AND UPPER (KRESLENNYA) LIKE UPPER (:chert)
AND UPPER (TU) LIKE UPPER (:tu)
AND UPPER (GOST) LIKE UPPER (:gost)

ORDER BY KLASS_CODE


Код2.
SELECT * FROM DOVIDNYK A, VYMIR B WHERE A.CODE_V=B.CODE_VYMIRU
AND KLASS_CODE LIKE ':kod'
AND TO_CHAR (OBLIK_NUMB) LIKE ':num'
AND ((UPPER (LONG_NAME) LIKE UPPER (':lname')) OR (UPPER SHORT_NAME) LIKE UPPER (':sname')))
AND UPPER (TYPE_P) LIKE UPPER (':tip')


Код3.
SELECT * FROM DOVIDNYK A, VYMIR B WHERE A.CODE_V=B.CODE_VYMIRU
AND KLASS_CODE LIKE ':kod'
AND TO_CHAR (OBLIK_NUMB) LIKE ':num'
AND ((UPPER (LONG_NAME) LIKE UPPER (':lname')) OR (UPPER SHORT_NAME) LIKE UPPER (':sname')))
AND UPPER (TU) LIKE UPPER (':tu')


DeepGray   (2004-08-04 13:28:00) [3]

Да, я галочку напротив СУБД поставил, но что-то не сработало.
Вообщем у меня Оракл.


Наверх

Титульная страница Поиск, карта сайта Написать письмо