![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамические колонки в хранимых процедурах на IB7.1 [D6, IB6.x]
Mic_2000 © (2003-11-18 00:39:00)
Привет!
Подскажите можно ли так сделать:
Есть таблица с колонками: M1,M2,M3,M4,M5,M6,M7,M8,M9,M10
Нужно что бы в хранимой процедуре в зависимости от передаваемого
параметра (от 1 до 10) выдавылась количество колонок равное параметру,
т.е. если в параметре стоит 4, то запрос был примерно таким:
SELECT M1,M2,M3,M4
FROM TABLE1
Заранее спасибо за ответ
Dmitry Glukhov (2003-11-21 12:54:00) [1]
А что находится в этих колонках, если это одни и те же данные, отличающиеся доп.свойствами (например, суммы затрат по разным подразделениям)? Тогда проще хранить в 3й нормальной форме и делать выборку по этому свойству (отдельный столбец) а на клиенте строить сводную таблицу в Excel"е или разворачивать данные другими средствами
Silver Alex (2003-11-19 18:17:00) [2]
> Человек спрашивал:
>
> > Silver Alex © (18.11.03 16:00) [5]
> > а разве можно сделать чтобы хранимая процедура возвращала
>
> > неизвестно сколько колонок?
>
>
> Возвращать то она может неизвестно скоко колонок. Их легко
> посмотреть на клиенте. А вот на сервере, если неизвестно ...
> я этого не делал.
это был риторический вопрос, ты сам бы попробовал
stud (2003-11-19 17:33:00) [3]
это правильно)))
Малиновский Владимир (2003-11-19 17:30:00) [4]
Ничего нельзя!
stud (2003-11-19 17:28:00) [5]
> Малиновский Владимир (19.11.03 17:26) [18]
чего нельзя?
Малиновский Владимир (2003-11-19 17:26:00) [6]
Ну нельзя!
stud (2003-11-19 17:23:00) [7]
нет, а в чем проблема на клиенте указать количество возвращаемых колонок? зачем этим должен заниматься сервер? к тому MS SQL и Interbase немного разные звери))
Johnmen (2003-11-19 17:20:00) [8]
>Vetal © (19.11.03 16:59) [15]
>не количество возвращаемых параметров, а количество возвращаемых колонок. Ты не путай!
По-моему, путаешь ты. А еще путаешь IB с MSSQL.
Vetal (2003-11-19 16:59:00) [9]
Человек спрашивал:
> Silver Alex © (18.11.03 16:00) [5]
> а разве можно сделать чтобы хранимая процедура возвращала
> неизвестно сколько колонок?
Возвращать то она может неизвестно скоко колонок. Их легко посмотреть на клиенте. А вот на сервере, если неизвестно, сколько процедура возвращает колонок, возможно это можна было бы посмотреть используя системные таблицы. Но мне все таки кажется, что этого нельзя. На самом ЭсКуЭл сервере я этого не делал.
> Johnmen © (18.11.03 23:07) [9]
>
> Динамическое изменение количества возвращаемых ХП параметров
> ?
не количество возвращаемых параметров, а количество возвращаемых колонок. Ты не путай! И никаких процедур не нужно при этом переписывать во время выполнения.
Вобще я у себя ща пишу прогу с использованием МС ЭсКуэЛ Сервера. Есть в ней такая штука. ХП внутри себя строит динамический запрос, возвращает набор на клиента, он определяет количество и типы колонок, и соотв образом их обрабатывает.
Малиновский Владимир (2003-11-19 13:01:00) [10]
Нельзя
Danilka (2003-11-19 10:00:00) [11]
только вот, нафига все это нужно???
обычное дело, формировать запрос на клиенте, с любым кол-вом возвращаемых колонок, хоть десять, хоть двадцать и даже 13 можно.
stud (2003-11-19 09:51:00) [12]
мы комсомольцы легкого пути не ищем))))
Zacho (2003-11-19 09:50:00) [13]
> stud © (19.11.03 09:40) [10]
Плохая идея, уж поверь.
stud (2003-11-19 09:40:00) [14]
а вообще это наверное идея, переписывать процедуры во время выполнения.....
Johnmen (2003-11-18 23:07:00) [15]
>Vetal ©
Динамическое изменение количества возвращаемых ХП параметров ?
Это новая, еще не открытая никем страница в функциональности IB !
А может быть это недокументированная фича ?
:)))
Vetal (2003-11-18 18:53:00) [16]
Я думаю это сделать можно. Покопайся в системных таблицах и системных хранимых процедурах, через них по идее можно получить информацию о хранимых процедурах с описанием всех параметров.
Silver Alex (2003-11-18 17:04:00) [17]
> Vetal © (18.11.03 16:53) [6]
> 2Silver Alex: Конечно можно:
>
> MyProc.ExecProc();
> for i := 0 to MyProc.Fields.Count - 1 do
> DoSomething(MyProc.Fields[i].Value);
>
> Я сам как раз сейчас этим занимаюсь.
это в Delphi ?имеется ввиду на SQL сервере, в Delphi я сам что хочешь напишу :))
Vetal (2003-11-18 16:53:00) [18]
2Silver Alex: Конечно можно:
MyProc.ExecProc();
for i := 0 to MyProc.Fields.Count - 1 do
DoSomething(MyProc.Fields[i].Value);
Я сам как раз сейчас этим занимаюсь.
Silver Alex (2003-11-18 16:00:00) [19]
а разве можно сделать чтобы хранимая процедура возвращала неизвестно сколько колонок?По моему нет.По крайней мере я это не поборол, но если кто-то знает ответ было бы интересно услышать.Потому что вышесказанное я так понимаю все теория
Vetal (2003-11-18 15:52:00) [20]
Делаешь в хранимой процедуре цикл While с числом циклов, равным твоему параметру, формируеш динамический запрос в текстовой переменной, а затем выполняеш этот динамический запрос.