Форум: "Базы";
Текущий архив: 2005.01.02;
Скачать: [xml.tar.bz2];
Внизкак использовать ParamByName в селекте ...in (:MyParam) ? Найти похожие ветки
← →
StarCon (2004-12-06 13:50) [0]Для связи с ораклом используется БДЕ и TQuery.
Запрос примерно следующий: "select * from table where field in (:MyParam)". Проблема в том что field у меня - integer, а в качестве параметра передается строка (несколько значений через запятую). Как быть? Необходимо обязательно передавать параметр через ParamByName...
← →
Johnmen © (2004-12-06 13:52) [1]То, что ты хочешь, это не параметр, а макроподстановка. (дежа вю у меня конкретное :))
Динамически формируй текст запроса.
← →
StarCon (2004-12-06 14:01) [2]Динамически нельзя. Нужно обязательно использовать переменные.
Неужели никак нельзя обойти? В DOA на этот случай есть спец. тип параметра...
← →
Sergey13 © (2004-12-06 14:03) [3]2[2] StarCon (06.12.04 14:01)
>Динамически нельзя. Нужно обязательно использовать переменные.
Почему?
>В DOA на этот случай есть спец. тип параметра...
Так DOA и юзай.
← →
Johnmen © (2004-12-06 14:05) [4]>В DOA на этот случай есть спец. тип параметра...
Тебе показалось. Т.к. см. [1]
← →
roottim © (2004-12-06 14:05) [5]>В DOA на этот случай есть спец. тип параметра
какой
>Динамически нельзя
религия?
← →
Sergey13 © (2004-12-06 14:10) [6]2[4] Johnmen © (06.12.04 14:05)
>Тебе показалось. Т.к. см. [1]
Нет. Там есть такое. Правда реализовано в конечном итоге скорее всего переделкой запроса.
← →
StarCon (2004-12-06 14:20) [7]не я этот биллинг проектировал и писал. этим и кончится когда-нибудь, но задача перевода проекта с бде на doa или odac - не на одну неделю.
так что, более конструктивных вариантов нет?
← →
Sergey13 © (2004-12-06 14:37) [8]Для запроса вида
"select * from table where field in ()"
использование параметров тоже не конструктивный вариант. 8-)
Можно попробовать создать временную таблицу, записать туда параметры и соединить с главной таблицей.
← →
Johnmen © (2004-12-06 14:43) [9]Для биллинговых систем использование IN, по меньшей мере, странно, ввиду тормозов.
← →
roottim © (2004-12-06 14:49) [10]множество не может быть переменной, это макроподстановка, имхо, однозначно.
не пойму что мешает написать, пусть BDE,
q1.Sql.Text := Format("select * from table where field in (%s)", [vMyStr]);
← →
StarCon (2004-12-07 13:43) [11]если использование IN странно, то чем можно заменить эту конструкцию?
← →
Sergey13 © (2004-12-07 13:45) [12]Ну например в [8] я описывал вариант. Не подойдет?
← →
Johnmen © (2004-12-07 14:07) [13]>StarCon (07.12.04 13:43) [11]
>если использование IN странно, то чем можно заменить эту конструкцию?
Зависит от постановки вопроса, от смысла списка, откуда он берется, как...
← →
StarCon (2004-12-07 14:29) [14]вариант 8 - не пойдет
по-моему куда меньше тормозов будет, если In использовать, чем по каждому поводу создавать временные таблицы.
Ситуация такая - есть таблица, большая
выборка из нее идет по одному полю, но значения и их количества разные, например - in (3, 56, 78)
использовать макроподстановку нежелательно, т.к. сам текст запроса очень большой, вызывается часто, а для оракла при макроподстановке - это разные селекты, кэш забивается и т.п. и т.д. А если бы был параметр - то сервер очень хорошо бы обходился с этими запросами...
← →
Sergey13 © (2004-12-07 14:37) [15]2[14] StarCon (07.12.04 14:29)
>по-моему куда меньше тормозов будет, если In использовать, чем по каждому поводу создавать временные таблицы.
Зачем каждый раз? Создай один раз для всех подобных запросов.
>использовать макроподстановку нежелательно...А если бы был параметр - то сервер очень хорошо бы обходился с этими запросами...
Так говорят же тебе, даже если ты думаешь, что используешь параметры, в этом случае будет макроподстановка.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.01.02;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.03 c