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

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

Хранимые процедуры в FireBird [D7]


Tany ©   (2009-04-26 01:00:00) 

PSQL - ткните пожалуйта на русские доки, ничего не могу найти по циклам итд.

Нужно сделать следующие:
1) получить результат запроса 'select' прямо в процедуре (результат наверное можно слить в курсор?)
2)затем (fetch all) отрыть все записи из курсора
3)пробежаться циклом по открытому набору из сделать подзапрос к другой табличке, если  результат подзапроса удовлетворяется, то обновить 'третью табличку'.

это вобщих чертах для нагрядности, можно ли вообще  делать такое в процедурах, чтобы полностью весь обсчет перенести на серверную часть?

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


sniknik   (2009-04-26 15:06:00) [1]

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

> цель понять стоит ли так сильно заморачиваться на этих процедурах
заморачиваться ни на чем не стоит, вот подучить sql это да, пригодится. но даже зная как писать процедуры не стоит их пихать куда ни попадя.


Tany   (2009-04-26 14:36:00) [2]

Ну объесните еще дубу,

вот пример из R. Notes


DECLARE RNAME CHAR(31);
DECLARE C CURSOR FOR ( SELECT RDB$RELATION_NAME
FROM RDB$RELATIONS );
BEGIN
OPEN C;
WHILE (1 = 1) DO
BEGIN
FETCH C INTO :RNAME;
IF (ROW_COUNT = 0) THEN
LEAVE;
SUSPEND;
END
CLOSE C;
END


1)ну тут понятно: выбирается только одно поле и заносится в переменную
RNAME;
FETCH C INTO :RNAME;
а если их несколько?

2)и если в цикле WHILE (1 = 1) DO нужно делать заполнение еще одного курсора по условию предыдущей выборки, но объвить его можно только полсе 'as'?

> и все это скорее всего можно заменить на один апдейт по
> под запросу с объединением...
> если решать задачу конечно, а не обсуждать абстракции.


Решаю эту задачу без проблем использую пять TQuery, цель понять стоит ли так сильно заморачиваться на этих процедурах, мне кажеться польностью заменить паскаль они не могут? вот не пойму как решить 1) и 2) из моего вопроса.


sniknik   (2009-04-26 02:20:00) [3]

> Нужно сделать следующие:
> 1) получить результат запроса 'select' прямо в процедуре (результат наверное можно слить в курсор?)
> 2)затем (fetch all) отрыть все записи из курсора
> 3)пробежаться циклом по открытому набору из сделать подзапрос к другой табличке, если  результат подзапроса удовлетворяется, то обновить 'третью
>табличку'.
и все это скорее всего можно заменить на один апдейт по под запросу с объединением...
если решать задачу конечно, а не обсуждать абстракции.


ТД   (2009-04-26 01:05:00) [4]

www.ibase.ru


Наверх

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