Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];

Вниз

Условия в хранимой процедуре   Найти похожие ветки 

 
SyncMaster795DF   (2006-11-26 21:53) [0]

Задача стоит в хранимую процедуру предедать два параметра: что выбирать и как сортировать.

Есть хранимая процедура вида:

for select a0, a1, a2, a3, a4, a5, a6, a7, a8, a9
    from table
    into :p0, :p1, :p2, :p3, :p4, :p5, :p6, :p7, :p8, :p9
do suspend;

Каким-то образом нужно в эту процедуру передать условия выбора по полю a0, a1, a2, причем нужно учесть, что любое из этих полей может быть пустым, т.е. выборка должна производится без учета значения этого поля. при этом вторым параметром в процедуру нужно переадть параметр определяющий порядок сортировки: по полю a0, a1 или a2.

Как передать в хранимую процедуру эти два параметра???
Или лучше на стороне клиента эти условия подписывать в запрос выбора из этой процедуры?


 
DrPass ©   (2006-11-26 23:06) [1]

С точки зрения эффективности выгоднее будет самый тупой вариант - написать этот select c order by столько раз, сколько есть вариантов сортировки. Ну и разруливать их через if () then
С точки зрения "красивости" кода следует использовать FB1.5+ и оператор EXECUTE STATEMENT в нем


 
Desdechado ©   (2006-11-27 11:14) [2]

> С точки зрения "красивости" кода следует использовать FB1.5+ и оператор EXECUTE STATEMENT в нем
Сомнительна польза от такой красивости. Потому как каждый раз будет парситься запрос.

автору
Вообще не понимаю, зачем для такого запроса хранимка? Гораздо проще и удобнее написать SELECT, конструируемый на лиету в программе. И никакого геморроя с выбором сортировки.


 
PEAKTOP ©   (2006-11-27 20:46) [3]

> С точки зрения "красивости" кода следует использовать FB1.5+ и оператор EXECUTE STATEMENT в нем

Если совсем все делать красивым, то лучше FB2.0 + EXECUTE BLOCK, формируемый "на лету" или см. Desdechado ©   (27.11.06 11:14) [2]


 
SyncMaster795DF   (2006-11-27 22:17) [4]

На самом деле процедура гораздо сложнее: куча объединений, вложенные запросы и т.д.
Просто для простоты описания проблемы "изобразил" упрощенный вариант:)


 
Ksan ©   (2006-11-29 10:42) [5]

а кто мешает сортировать на клиенте ?


 
Desdechado ©   (2006-11-29 12:25) [6]

Ksan ©   (29.11.06 10:42) [5]
Если прописать ORDER BY в запросе из процедуры, то это чревато тормозами, т.к. в этом случае не используются индексы.
А если уж совсем в клиентском датасете (после обращения к БД), то там заметное число ограничений...


 
Ksan ©   (2006-11-29 12:30) [7]

собственно я подразумевал последний вариант ... а какие ограничения ?? что то я за свою практику не сталкивался


 
Desdechado ©   (2006-11-29 13:38) [8]

Ksan ©   (29.11.06 12:30) [7]
Например, сортировка по нескольким полям в разных направлениях.


 
Ksan ©   (2006-11-29 13:43) [9]

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



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.04 c
15-1170160747
Манюня
2007-01-30 15:39
2007.02.18
Спасибо мастерам


11-1148486838
Alexei6021
2006-05-24 20:07
2007.02.18
Перекодировка ANSI-Dos(OEM)


2-1170058633
Kotofeich
2007-01-29 11:17
2007.02.18
Скрыть кнопку


3-1164264466
pavel_guzhanov
2006-11-23 09:47
2007.02.18
Как сделать, чтобы если в диалоге ввода логина и пароля


15-1169943912
MikePetrichenko
2007-01-28 03:25
2007.02.18
И снова о плагиате





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский