powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Модификация запроса в хр. процедуре
22 сообщений из 22, страница 1 из 1
Модификация запроса в хр. процедуре
    #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
Модификация запроса в хр. процедуре
    #32515275
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На IF 'ах пиши.
...
Рейтинг: 0 / 0
Модификация запроса в хр. процедуре
    #32515276
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно и на CASE , раз у тебя 1.5
...
Рейтинг: 0 / 0
Модификация запроса в хр. процедуре
    #32515736
Deem (это именно я!)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во, блин, точно. Тоже, правда, 12 if-фов. Или case попробую. Но что делать, если будет 100 или 1000?
...
Рейтинг: 0 / 0
Модификация запроса в хр. процедуре
    #32515764
Nikola18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А нельзя написать ещё одну XP, которая будучи вызванной из первой как
Select * from XP возвращала бы через SUSPEND множество значений-результатов этого запроса,
а их уже использовать по назначению.
И, кстати для уточнения вопроса, для чего столько переменных?
...
Рейтинг: 0 / 0
Модификация запроса в хр. процедуре
    #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
Модификация запроса в хр. процедуре
    #32517503
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ММмдя!? Не иначе как студент первокурсник. Ну что-ж опыт придёт со временем.
...
Рейтинг: 0 / 0
Модификация запроса в хр. процедуре
    #32520507
Deem (это именно я!)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во, блин, гуру. Может и мне пройтись по твом, Zmei, сообщениям, да повставлять подобные коментарии? Давай конкретный вариант решения. А суммы считаю я не одним запросом. Это сокращенная запись. Там, кстати, написано. Главное - сабж. Вот и подскажи как програмно отправить суммы по разным переменным в цикле. Сори, если ты ранимый.
...
Рейтинг: 0 / 0
Модификация запроса в хр. процедуре
    #32520526
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во, блин, гуру. Может и мне ... если ты ранимый.

Брат, не бузи. Все уже поняли, что ты пытаешься реализовать плохо формализованную задачу. Ну, типа - расскажи, в чем состоит задача, подумаем - и подскажем, может, обойдем твою проблему.
...
Рейтинг: 0 / 0
Модификация запроса в хр. процедуре
    #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
Модификация запроса в хр. процедуре
    #32520548
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переменные для месяцев зовутся M1..M12 (на клиенте легко обработать, убрав первый символ

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

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

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

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

это же флейм! смотрите сколько вам ненужных сообщений на это накидали. оно вам надо? тогда воздержитесь, пожалуйста...
...
Рейтинг: 0 / 0
Модификация запроса в хр. процедуре
    #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
Модификация запроса в хр. процедуре
    #32521825
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deem (это именно я!)to Мимопроходящий
Зато это ответ на поставленнй вопрос. :)
Не вижу что бы я что-то спрашивал...
...
Рейтинг: 0 / 0
Модификация запроса в хр. процедуре
    #32522541
Deem (это именно я!)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Мимопроходящий

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


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


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