Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2012, 18:17   #1
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
Вопрос Временные таблицы в Firebird

Здравствуйте!
С очень сложной select выборкой нужно сделать такое:
1. summ table1.field1 select from...into
2. if summ>100 then update table1.field2=Y
То есть нужно сначала посчитать сумму, а затем, если условие проходит, обновить поля в точно такой же сложной выборке.
Чтобы не делать для второго действия выборку повторно можно ли в FB2.5 как-то после первого действия сохранить в оперативной памяти выборку (без создания реальной таблицы в БД)???
delphicoding вне форума Ответить с цитированием
Старый 11.03.2012, 18:39   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

1. обновлять поля можно только в таблице (НЕ В ВЫБОРКЕ)
Цитата:
обновить поля в точно такой же сложной выборке.
2. если FB поддерживает вложенные запросы. А почему бы ему их не поддерживать.
все делаем в одном запрсе на обновление (примерно так)
Код:
update tableR set filed=calcsumm // обновить поле в нужной таблице на основе расчитаннной величины
from tableR 
inner join ( select idrec, sum(clacfield) as calcsum   // То есть нужно сначала посчитать сумму,
               from tableX group by idrec
               having sum(calcsum)>delta  // если условие проходит,
           ) as clactable on calctable.idrec =tableR.idrec //
ну и конечно расчетный блок (вложенный запрос) может быть как угодно сложен.

3. если это не подходит смотрим хранимые процедуры и куросры (временные таблицы в памяти сервера).
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 11.03.2012 в 19:02.
evg_m вне форума Ответить с цитированием
Старый 11.03.2012, 20:21   #3
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Большое спасибо за подробный ответ!
Но никак не хочет сохраняться эта процедура!
Код:
begin
  update Px
  set px.n=px.n+nt
  from PX
  inner join PA on px.id=pa.id
  left join PB on pa.id=pb.id
  where ((.....))
end
IBExpert 2011.07, FB2.5. Всё время пишет ошибка - не знает что такое "FROM"!!! Пробовал перед from ставить ';' - одинаково! Ну что с ним делать?!
delphicoding вне форума Ответить с цитированием
Старый 11.03.2012, 20:44   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Firebird синтаксис UPDATE с FROM не поддерживает
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.03.2012, 21:07   #5
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Печаль, а как быть то???
delphicoding вне форума Ответить с цитированием
Старый 12.03.2012, 09:32   #6
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

как быть вам написали.... используйте вложенные запросы

Код:
 update Px
  set px.n=px.n+nt
 where  px.id=(select pa.id from Pa,pb where pb.id=pa.id and .....)
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)

Последний раз редактировалось BARNEY; 12.03.2012 в 09:34.
BARNEY вне форума Ответить с цитированием
Старый 13.03.2012, 12:44   #7
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Так ещё не писали. Всем спасибо, попробую.
delphicoding вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ADODB Connection, RecordSet и временные таблицы AdrenalinE Microsoft Office Access 12 11.04.2011 22:24
Очистка таблицы в FireBird Lokos Помощь студентам 5 30.11.2010 09:59
Удаление записи из таблицы с помощю процедуры firebird postaveche БД в Delphi 23 08.09.2010 12:28
как заполнить DBLookupComboBoxEh из таблицы firebird postaveche Помощь студентам 16 03.09.2010 18:46
помогите создать таблицы с отношениями firebird alex_-87 SQL, базы данных 1 29.12.2009 18:56