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

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

как использовать ParamByName в селекте '...in (:MyParam)'? [D7]


StarCon ©   (2004-12-06 13:50:00) 

Для связи с ораклом используется БДЕ и TQuery.
Запрос примерно следующий: 'select * from table where field in (:MyParam)'. Проблема в том что field у меня - integer, а в качестве параметра передается строка (несколько значений через запятую). Как быть? Необходимо обязательно передавать параметр через ParamByName...


Sergey13   (2004-12-07 14:37:00) [1]

2[14] StarCon   (07.12.04 14:29)
>по-моему куда меньше тормозов будет, если In использовать, чем по каждому поводу создавать временные таблицы.
Зачем каждый раз? Создай один раз для всех подобных запросов.

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

Так говорят же тебе, даже если ты думаешь, что используешь параметры, в этом случае будет макроподстановка.


StarCon   (2004-12-07 14:29:00) [2]

вариант 8 - не пойдет
по-моему куда меньше тормозов будет, если In использовать, чем по каждому поводу создавать временные таблицы.
Ситуация такая - есть таблица, большая
выборка из нее идет по одному полю, но значения и их количества разные, например - in (3, 56, 78)
использовать макроподстановку нежелательно, т.к. сам текст запроса очень большой, вызывается часто, а для оракла при макроподстановке - это разные селекты, кэш забивается и т.п. и т.д. А если бы был параметр - то сервер очень хорошо бы обходился с этими запросами...


Johnmen   (2004-12-07 14:07:00) [3]

>StarCon   (07.12.04 13:43) [11]
>если использование IN странно, то чем можно заменить эту конструкцию?

Зависит от постановки вопроса, от смысла списка, откуда он берется, как...


Sergey13   (2004-12-07 13:45:00) [4]

Ну например в [8] я описывал вариант. Не подойдет?


StarCon   (2004-12-07 13:43:00) [5]

если использование IN странно, то чем можно заменить эту конструкцию?


roottim   (2004-12-06 14:49:00) [6]

множество не может быть переменной, это макроподстановка, имхо, однозначно.
не пойму что мешает написать, пусть BDE,

q1.Sql.Text := Format('select * from table where field in (%s)', [vMyStr]);


Johnmen   (2004-12-06 14:43:00) [7]

Для биллинговых систем использование IN, по меньшей мере, странно, ввиду тормозов.


Sergey13   (2004-12-06 14:37:00) [8]

Для запроса вида
'select * from table where field in ()'
использование параметров тоже не конструктивный вариант. 8-)
Можно попробовать создать временную таблицу, записать туда параметры и соединить с главной таблицей.


StarCon   (2004-12-06 14:20:00) [9]

не я этот биллинг проектировал и писал. этим и кончится когда-нибудь, но задача перевода проекта с бде на doa или odac - не на одну неделю.
так что, более конструктивных вариантов нет?


Sergey13   (2004-12-06 14:10:00) [10]

2[4] Johnmen ©   (06.12.04 14:05)
>Тебе показалось. Т.к. см. [1]
Нет. Там есть такое. Правда реализовано в конечном итоге скорее всего переделкой запроса.


Johnmen   (2004-12-06 14:05:00) [11]

>В DOA на этот случай есть спец. тип параметра...

Тебе показалось. Т.к. см. [1]


roottim   (2004-12-06 14:05:00) [12]

>В DOA на этот случай есть спец. тип параметра
какой
>Динамически нельзя
религия?


Sergey13   (2004-12-06 14:03:00) [13]

2[2] StarCon   (06.12.04 14:01)
>Динамически нельзя. Нужно обязательно использовать переменные.
Почему?

>В DOA на этот случай есть спец. тип параметра...
Так DOA и юзай.


StarCon   (2004-12-06 14:01:00) [14]

Динамически нельзя. Нужно обязательно использовать переменные.
Неужели никак нельзя обойти? В DOA на этот случай есть спец. тип параметра...


Johnmen   (2004-12-06 13:52:00) [15]

То, что ты хочешь, это не параметр, а макроподстановка. (дежа вю у меня конкретное :))
Динамически формируй текст запроса.


Наверх

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