Текущий архив: 2002.09.26;
Скачать: CL | DM;
Внизselect distinct Найти похожие ветки
← →
Beer (2002-09-04 17:26) [0]Уважаемые мастера!
При попытке выполнения запроса select distinct [field_name] from [view_name]IBExpert зависает, а если FIBами пользуемся, то ошибка "DataSet open"... Выборка именно из view, а не table.
В чем могут быть возможные причины?
← →
Val (2002-09-04 17:47) [1]текст обзора?
← →
Beer (2002-09-04 17:52) [2]Дело в том, что view создается динамически, т.е. заранее неизвестно, какие ограничения там будут, но все идет из одной таблицы, т.е. просто ограничение по значениям полей.
Ну, например
create view V1(field1, field2, field3)
as
select field1, field2, field3
from table
where field2=value1 and field3 in (val2, val3)
А запрос потом
select distinct field1 from V1
Или нужна точная структура таблицы и тексты?
← →
Val (2002-09-04 18:04) [3]погодите, обзор - метаданные бд, то есть никакой динамики - вы или создаете статически обзор и работает с ним, либо (вроде ваш вариант) создаете, работаете с ним, удаляете, создаете с тем же именем и т.д. - так я вас понял?
← →
Romkin (2002-09-04 18:11) [4]кошмар! Не знаю, как в IB6, но в 5 версии допускалось не более 256 изменений метаданных (обнуляется после backup/restore), так можно и влететь...
А View в IB тормозят, лучше применять хранимые процедуры, да и читабельнее
А что, с клиента запрос нельза сформировать и вызвать?
← →
Beer (2002-09-05 10:21) [5]>Val Ну да, именно так, просто с точки зрения программы клиента это динамика..
>Romkin Можно конечно и с клиента, но дело в том, что потом его не раз придется пробегать туда-сюда, т.е. работать с каждой записью и я подумал, что на сервере с помощью курсоров это будет выгоднее делать.. Ты считаешь, что view работает медленнее, чем процедура c suspend? Даже если это так, то процедуру из программы тоже нуно будет как-то динамично создавать, или запрос формировать внутри процедуры, что можно сделать с помощью сбора запроса из строк, но IB нет механизма выполнения запроса из строки, как например в Informix или я просто что-то не знаю?
← →
Romkin (2002-09-05 10:38) [6]И как тебе курсор на сервере IB?
На самом деле, как только открываешь запрос, это и есть курсор, и если не указал UniDirectional, бегай туда-обратно сколько угодно, после фетчинга всех записей Query к серверу не обращается, пока изменений не сделаешь
В IB нет выполнения запроса из переменной, только по запросу с клиента
Хранимая процедура с suspend выполняется быстрее всего, тем более, что сложный запрос в ней лучше делать по частям (листаем одну таблицу, и выбираем остальные поля из других таблиц внутри for)
IB 5 позволяет только 256 изменений метаданных, так что формировать процедуру динамически не пройдет, да это и дурной тон
Если есть критерии выбора, которые есть в любом случае, сделай процедуру для них, а на клиенте просто формируй where к ее вызову по остальным параметрам.
Но тебе легче просто формировать запрос на клиенте, и никаких view и процедур не надо
← →
Beer (2002-09-05 11:33) [7]Спасибо!! Буду переделывать... =о)
Страницы: 1 вся ветка
Текущий архив: 2002.09.26;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.012 c