Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Модификация запроса в хр. процедуре / 22 сообщений из 22, страница 1 из 1
12.05.2004, 18:32:34
    #32515267
Deem (это именно я!)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация запроса в хр. процедуре
Юзаю FBird 1.5

В хранимой процедуре необходимо выполнить запрос несколько раз в цикле (копировать я и сам умею :) ) с отправкой результата в разные переменнные.

Переменные M1,M2,M3 ... M12

Запрос (упрощенно)
for select name from monthes into Mx do ... ;
В execute statement не вставляется into. А как поменять into M1 на into M2 ?
Подошла бы переменная - массив , так где ж ее взять?

Что скажете?
...
Рейтинг: 0 / 0
12.05.2004, 18:36:14
    #32515275
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация запроса в хр. процедуре
На IF 'ах пиши.
...
Рейтинг: 0 / 0
12.05.2004, 18:36:57
    #32515276
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация запроса в хр. процедуре
А можно и на CASE , раз у тебя 1.5
...
Рейтинг: 0 / 0
13.05.2004, 10:10:36
    #32515736
Deem (это именно я!)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация запроса в хр. процедуре
Во, блин, точно. Тоже, правда, 12 if-фов. Или case попробую. Но что делать, если будет 100 или 1000?
...
Рейтинг: 0 / 0
13.05.2004, 10:23:51
    #32515764
Nikola18
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация запроса в хр. процедуре
А нельзя написать ещё одну XP, которая будучи вызванной из первой как
Select * from XP возвращала бы через SUSPEND множество значений-результатов этого запроса,
а их уже использовать по назначению.
И, кстати для уточнения вопроса, для чего столько переменных?
...
Рейтинг: 0 / 0
14.05.2004, 10:25:56
    #32517419
Deem (это именно я!)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация запроса в хр. процедуре
Вобще интересно как выкручиваться в подобной ситуации.
А конкретно: ХП составляет итоговую годовую таблицу с месячными суммами. И суспендирует(с) запись типа <Клиент, январь, февраль ... и т.д.> . Переменные для месяцев зовутся M1..M12 (на клиенте легко обработать, убрав первый символ). Одним запросом это не решается, т.к. дофига ньюансов при расчете таблицы. Поэтому - ХП. А переменные Mx могли бы быть массивом (!!!), чтоб не писать так

Идем по месяцам и считаем сумму INTO :MONTHSUMMA;
IF ( MONTHID = 1 ) THEN M1 = MONTHSUMMA; ELSE
IF ( MONTHID = 2 ) THEN M2 = MONTHSUMMA; ELSE
IF ( MONTHID = 3 ) THEN M3 = MONTHSUMMA; ELSE
IF ( MONTHID = 4 ) THEN M4 = MONTHSUMMA; ELSE
IF ( MONTHID = 5 ) THEN M5 = MONTHSUMMA; ELSE
IF ( MONTHID = 6 ) THEN M6 = MONTHSUMMA; ELSE
IF ( MONTHID = 7 ) THEN M7 = MONTHSUMMA; ELSE
IF ( MONTHID = 8 ) THEN M8 = MONTHSUMMA; ELSE
IF ( MONTHID = 9 ) THEN M9 = MONTHSUMMA; ELSE
IF ( MONTHID = 10 ) THEN M10 = MONTHSUMMA; ELSE
IF ( MONTHID = 11 ) THEN M11 = MONTHSUMMA; ELSE
IF ( MONTHID = 12 ) THEN M12 = MONTHSUMMA;

Case не проходит, т.к. он может вернуть разные значения в одну переменную, а надо наоборот: одно значение в разные переменные.

Вобщем, я уже пытаюсь из переменной BLOB делать массив. :)
...
Рейтинг: 0 / 0
14.05.2004, 11:03:12
    #32517503
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация запроса в хр. процедуре
ММмдя!? Не иначе как студент первокурсник. Ну что-ж опыт придёт со временем.
...
Рейтинг: 0 / 0
17.05.2004, 14:52:21
    #32520507
Deem (это именно я!)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация запроса в хр. процедуре
Во, блин, гуру. Может и мне пройтись по твом, Zmei, сообщениям, да повставлять подобные коментарии? Давай конкретный вариант решения. А суммы считаю я не одним запросом. Это сокращенная запись. Там, кстати, написано. Главное - сабж. Вот и подскажи как програмно отправить суммы по разным переменным в цикле. Сори, если ты ранимый.
...
Рейтинг: 0 / 0
17.05.2004, 15:00:40
    #32520526
mv
mv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация запроса в хр. процедуре
Во, блин, гуру. Может и мне ... если ты ранимый.

Брат, не бузи. Все уже поняли, что ты пытаешься реализовать плохо формализованную задачу. Ну, типа - расскажи, в чем состоит задача, подумаем - и подскажем, может, обойдем твою проблему.
...
Рейтинг: 0 / 0
17.05.2004, 15:02:08
    #32520528
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация запроса в хр. процедуре
CASE как раз может подойти :

Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT
SUM(CASE WHEN MONTHID =  1  THEN FIELD ELSE  0  END),
...
SUM(CASE WHEN MONTHID =  12  THEN FIELD ELSE  0  END)
FROM TABLE 
INTO :M1, ..., M12

Попробуй вот так!

Best regards,
Dnico.
...
Рейтинг: 0 / 0
17.05.2004, 15:07:16
    #32520548
mv
mv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация запроса в хр. процедуре
Переменные для месяцев зовутся M1..M12 (на клиенте легко обработать, убрав первый символ

Один чел предлагал варианты отбора кандидатов в программисты при приеме на работу, не помню точно, но там было что-то вроде "... если неоправданно большое число случаев применения StrToInt - долой!"
...
Рейтинг: 0 / 0
17.05.2004, 15:59:50
    #32520704
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация запроса в хр. процедуре
Hello!

>В execute statement не вставляется into

ты лучше release notes к FB 1.5 почитай, про execute statement. а то сейчас тебе насоветуют и case, и if-ы...
...
Рейтинг: 0 / 0
17.05.2004, 16:15:51
    #32520742
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация запроса в хр. процедуре
Во, блин, гуру. Может и мне ... если ты ранимый.

Я считаю, что тебе Nicola18 дал верное направление для размышлений. Несколько твоих переменных станут множеством(набором данных). Возможно надо будет менять архитектуру базы (структуру таблиц). Но ты либо не заметил, либо не захотел подумать. Мы, конечно, разрулим любую задачу, если навалимся все вместе. Но тогда в чём заключается помощь? Помогать вовсе не означает замещать.
...
Рейтинг: 0 / 0
17.05.2004, 16:37:54
    #32520802
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация запроса в хр. процедуре
> Во, блин, гуру. Может и мне пройтись по твом, Zmei, сообщениям, да повставлять подобные коментарии?

это же флейм! смотрите сколько вам ненужных сообщений на это накидали. оно вам надо? тогда воздержитесь, пожалуйста...
...
Рейтинг: 0 / 0
18.05.2004, 11:45:10
    #32521767
Deem (это именно я!)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация запроса в хр. процедуре
To kdv

>>>В execute statement не вставляется into

>>ты лучше release notes к FB 1.5 почитай, про execute statement. а то сейчас >>тебе насоветуют и case, и if-ы...

Да вставляются, только не в модифицируемую часть. Into как раз выносится за нее. А потому, изменение цели невозможно в execute statement. Или снова не так?

To my

>>>Переменные для месяцев зовутся M1..M12 (на клиенте легко обработать, >>>убрав первый символ

>>Один чел предлагал варианты отбора кандидатов в программисты при приеме >>на работу, не помню точно, но там было что-то вроде "... если неоправданно >>большое число случаев применения StrToInt - долой!"

Чем фраза "на клиенте легко обработать" не подходит? При необходимости определить номер месяца на клиенте при какой-нибудь обработке столбцов в гриде.... Чего не так? Кстати, не пользуюсь я StrToInt. :) Предпочитаю atoi.
И "неоправданно" - это сколько?

to Zmeishe

Я все заметил. Однако, заметил и то, что от вас исходит только флейм.
Да и fedd тоже не отстает.

to Dnico

Я чо-то забыл про саse в select. Я его как отдельный оператор совал в процедуру. Да, вот этот вариант хороший. Главное упростил всю процедуру.
Спасибо.

to Nikola18

Мне кажется, это еще большее усложнение.

to Мимопроходящий

Зато это ответ на поставленнй вопрос. :)
...
Рейтинг: 0 / 0
18.05.2004, 12:07:51
    #32521825
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация запроса в хр. процедуре
Deem (это именно я!)to Мимопроходящий
Зато это ответ на поставленнй вопрос. :)
Не вижу что бы я что-то спрашивал...
...
Рейтинг: 0 / 0
18.05.2004, 15:53:56
    #32522541
Deem (это именно я!)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация запроса в хр. процедуре
to Мимопроходящий

Ответ на МОЙ вопрос :)


С двенацатью месяцами я справился с вашей помощью. Все быстро работает.
Однако, если это не двенадцать месяцев, а, скажем, 50 фирм. Неужели case на 50 вариантов?
...
Рейтинг: 0 / 0
18.05.2004, 15:55:50
    #32522545
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация запроса в хр. процедуре
А тебе нужно именно в 50 столбиков?
...
Рейтинг: 0 / 0
19.05.2004, 10:53:13
    #32523385
Deem (это именно я!)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация запроса в хр. процедуре
Да, нужно. Вернее, не 50, а 36 - 12 мес. за 3 года в одну таблицу. Или хотите сказать, что это фигня? Тут как заказчик захочет. Это для составления отчета с тремя колонками по годам, в которых по 12 - для месяцев. А фирмы одни и те же.
Я не хочу, чтоб за меня все сделали. :) сам как-нибудь. Но, т.к. некоторые намекают, что я путь неверный выбираю, то, естественно, хочу услышать, как другие выкручиваются в подобной ситуации. Вот с CASE-сом продвинулся офигенно.
...
Рейтинг: 0 / 0
19.05.2004, 11:08:16
    #32523417
vis
vis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация запроса в хр. процедуре
а если по 50 фирмам по 364 дня за 3 года? :))
...
Рейтинг: 0 / 0
19.05.2004, 11:14:47
    #32523446
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация запроса в хр. процедуре
Рисовать заказчику отчёт в том виде как он хочет — это одно, разрабатывать архитектуру базы и математику расчёта — это другое.
Математика делается под себя — отчёт под заказчика.
Завтра заказчик объединится в холдинг и фирм у тебя будет не 50, а 150.
Именно поэтому подход с раздуванием количества переменных и столбцов прямо пропорционально количеству объектов учёта — я называю студенческим подходом!!
Совет:
Посмотри как в Билдере и Дельфях формируется метакуб и сделай по аналогии.
...
Рейтинг: 0 / 0
24.05.2004, 16:18:17
    #32531035
Deem (это именно я!)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификация запроса в хр. процедуре
Не...... Классно некоторые овечают на вопрос! :) Ничего не сказал по делу, однако отметился.
50 фирм - это к слову. Моя база посроена с учетом роста всего, что только в нее входит. Не надо делать скоропалительных выводов. 50 фирм - это 50 переменных. Мне и 12 кейсов было облом писать, хотя тут уж все четко: в году еще 10 месяцев уже не появится. :) Все Ваши ответы, Zmeishe, сводятся к одному: для каждого конкретного случая искать свой вариант. Это понятно.
Спасибо всем. Текущую задачу я решил. Всего наилучшего..
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Модификация запроса в хр. процедуре / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]