|
|
|
Модификация запроса в хр. процедуре
|
|||
|---|---|---|---|
|
#18+
Юзаю FBird 1.5 В хранимой процедуре необходимо выполнить запрос несколько раз в цикле (копировать я и сам умею :) ) с отправкой результата в разные переменнные. Переменные M1,M2,M3 ... M12 Запрос (упрощенно) for select name from monthes into Mx do ... ; В execute statement не вставляется into. А как поменять into M1 на into M2 ? Подошла бы переменная - массив , так где ж ее взять? Что скажете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2004, 18:32:34 |
|
||
|
Модификация запроса в хр. процедуре
|
|||
|---|---|---|---|
|
#18+
На IF 'ах пиши. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2004, 18:36:14 |
|
||
|
Модификация запроса в хр. процедуре
|
|||
|---|---|---|---|
|
#18+
А можно и на CASE , раз у тебя 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2004, 18:36:57 |
|
||
|
Модификация запроса в хр. процедуре
|
|||
|---|---|---|---|
|
#18+
Во, блин, точно. Тоже, правда, 12 if-фов. Или case попробую. Но что делать, если будет 100 или 1000? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2004, 10:10:36 |
|
||
|
Модификация запроса в хр. процедуре
|
|||
|---|---|---|---|
|
#18+
А нельзя написать ещё одну XP, которая будучи вызванной из первой как Select * from XP возвращала бы через SUSPEND множество значений-результатов этого запроса, а их уже использовать по назначению. И, кстати для уточнения вопроса, для чего столько переменных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2004, 10:23:51 |
|
||
|
Модификация запроса в хр. процедуре
|
|||
|---|---|---|---|
|
#18+
Вобще интересно как выкручиваться в подобной ситуации. А конкретно: ХП составляет итоговую годовую таблицу с месячными суммами. И суспендирует(с) запись типа <Клиент, январь, февраль ... и т.д.> . Переменные для месяцев зовутся 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 делать массив. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 10:25:56 |
|
||
|
Модификация запроса в хр. процедуре
|
|||
|---|---|---|---|
|
#18+
ММмдя!? Не иначе как студент первокурсник. Ну что-ж опыт придёт со временем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2004, 11:03:12 |
|
||
|
Модификация запроса в хр. процедуре
|
|||
|---|---|---|---|
|
#18+
Во, блин, гуру. Может и мне пройтись по твом, Zmei, сообщениям, да повставлять подобные коментарии? Давай конкретный вариант решения. А суммы считаю я не одним запросом. Это сокращенная запись. Там, кстати, написано. Главное - сабж. Вот и подскажи как програмно отправить суммы по разным переменным в цикле. Сори, если ты ранимый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 14:52:21 |
|
||
|
Модификация запроса в хр. процедуре
|
|||
|---|---|---|---|
|
#18+
Во, блин, гуру. Может и мне ... если ты ранимый. Брат, не бузи. Все уже поняли, что ты пытаешься реализовать плохо формализованную задачу. Ну, типа - расскажи, в чем состоит задача, подумаем - и подскажем, может, обойдем твою проблему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 15:00:40 |
|
||
|
Модификация запроса в хр. процедуре
|
|||
|---|---|---|---|
|
#18+
CASE как раз может подойти : Код: plaintext 1. 2. 3. 4. 5. 6. Попробуй вот так! Best regards, Dnico. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 15:02:08 |
|
||
|
Модификация запроса в хр. процедуре
|
|||
|---|---|---|---|
|
#18+
Переменные для месяцев зовутся M1..M12 (на клиенте легко обработать, убрав первый символ Один чел предлагал варианты отбора кандидатов в программисты при приеме на работу, не помню точно, но там было что-то вроде "... если неоправданно большое число случаев применения StrToInt - долой!" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 15:07:16 |
|
||
|
Модификация запроса в хр. процедуре
|
|||
|---|---|---|---|
|
#18+
Hello! >В execute statement не вставляется into ты лучше release notes к FB 1.5 почитай, про execute statement. а то сейчас тебе насоветуют и case, и if-ы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 15:59:50 |
|
||
|
Модификация запроса в хр. процедуре
|
|||
|---|---|---|---|
|
#18+
Во, блин, гуру. Может и мне ... если ты ранимый. Я считаю, что тебе Nicola18 дал верное направление для размышлений. Несколько твоих переменных станут множеством(набором данных). Возможно надо будет менять архитектуру базы (структуру таблиц). Но ты либо не заметил, либо не захотел подумать. Мы, конечно, разрулим любую задачу, если навалимся все вместе. Но тогда в чём заключается помощь? Помогать вовсе не означает замещать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 16:15:51 |
|
||
|
Модификация запроса в хр. процедуре
|
|||
|---|---|---|---|
|
#18+
> Во, блин, гуру. Может и мне пройтись по твом, Zmei, сообщениям, да повставлять подобные коментарии? это же флейм! смотрите сколько вам ненужных сообщений на это накидали. оно вам надо? тогда воздержитесь, пожалуйста... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 16:37:54 |
|
||
|
Модификация запроса в хр. процедуре
|
|||
|---|---|---|---|
|
#18+
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 Мимопроходящий Зато это ответ на поставленнй вопрос. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2004, 11:45:10 |
|
||
|
Модификация запроса в хр. процедуре
|
|||
|---|---|---|---|
|
#18+
Deem (это именно я!)to Мимопроходящий Зато это ответ на поставленнй вопрос. :) Не вижу что бы я что-то спрашивал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2004, 12:07:51 |
|
||
|
Модификация запроса в хр. процедуре
|
|||
|---|---|---|---|
|
#18+
to Мимопроходящий Ответ на МОЙ вопрос :) С двенацатью месяцами я справился с вашей помощью. Все быстро работает. Однако, если это не двенадцать месяцев, а, скажем, 50 фирм. Неужели case на 50 вариантов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2004, 15:53:56 |
|
||
|
Модификация запроса в хр. процедуре
|
|||
|---|---|---|---|
|
#18+
А тебе нужно именно в 50 столбиков? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2004, 15:55:50 |
|
||
|
Модификация запроса в хр. процедуре
|
|||
|---|---|---|---|
|
#18+
Да, нужно. Вернее, не 50, а 36 - 12 мес. за 3 года в одну таблицу. Или хотите сказать, что это фигня? Тут как заказчик захочет. Это для составления отчета с тремя колонками по годам, в которых по 12 - для месяцев. А фирмы одни и те же. Я не хочу, чтоб за меня все сделали. :) сам как-нибудь. Но, т.к. некоторые намекают, что я путь неверный выбираю, то, естественно, хочу услышать, как другие выкручиваются в подобной ситуации. Вот с CASE-сом продвинулся офигенно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 10:53:13 |
|
||
|
Модификация запроса в хр. процедуре
|
|||
|---|---|---|---|
|
#18+
а если по 50 фирмам по 364 дня за 3 года? :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 11:08:16 |
|
||
|
Модификация запроса в хр. процедуре
|
|||
|---|---|---|---|
|
#18+
Рисовать заказчику отчёт в том виде как он хочет — это одно, разрабатывать архитектуру базы и математику расчёта — это другое. Математика делается под себя — отчёт под заказчика. Завтра заказчик объединится в холдинг и фирм у тебя будет не 50, а 150. Именно поэтому подход с раздуванием количества переменных и столбцов прямо пропорционально количеству объектов учёта — я называю студенческим подходом!! Совет: Посмотри как в Билдере и Дельфях формируется метакуб и сделай по аналогии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 11:14:47 |
|
||
|
Модификация запроса в хр. процедуре
|
|||
|---|---|---|---|
|
#18+
Не...... Классно некоторые овечают на вопрос! :) Ничего не сказал по делу, однако отметился. 50 фирм - это к слову. Моя база посроена с учетом роста всего, что только в нее входит. Не надо делать скоропалительных выводов. 50 фирм - это 50 переменных. Мне и 12 кейсов было облом писать, хотя тут уж все четко: в году еще 10 месяцев уже не появится. :) Все Ваши ответы, Zmeishe, сводятся к одному: для каждого конкретного случая искать свой вариант. Это понятно. Спасибо всем. Текущую задачу я решил. Всего наилучшего.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 16:18:17 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32523417&tid=1578588]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
463ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 802ms |

| 0 / 0 |
