Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.12;
Скачать: CL | DM;

Вниз

Динамические колонки в хранимых процедурах на IB7.1   Найти похожие ветки 

 
Mic_2000   (2003-11-18 00:39) [0]

Привет!

Подскажите можно ли так сделать:

Есть таблица с колонками: M1,M2,M3,M4,M5,M6,M7,M8,M9,M10
Нужно что бы в хранимой процедуре в зависимости от передаваемого
параметра (от 1 до 10) выдавылась количество колонок равное параметру,
т.е. если в параметре стоит 4, то запрос был примерно таким:

SELECT M1,M2,M3,M4
FROM TABLE1

Заранее спасибо за ответ


 
Rad ©   (2003-11-18 06:32) [1]

Каскадом IF (PARAM = 4) разве что.


 
Digitman ©   (2003-11-18 09:04) [2]


> выдавылась количество колонок


кому выдавалось ? тому кто вызвал SP ? или - кому ?


 
alex_***   (2003-11-18 09:24) [3]

Не проще модифицировать сам запрос внутри клиента?


 
Vetal ©   (2003-11-18 15:52) [4]

Делаешь в хранимой процедуре цикл While с числом циклов, равным твоему параметру, формируеш динамический запрос в текстовой переменной, а затем выполняеш этот динамический запрос.


 
Silver Alex ©   (2003-11-18 16:00) [5]

а разве можно сделать чтобы хранимая процедура возвращала неизвестно сколько колонок?По моему нет.По крайней мере я это не поборол, но если кто-то знает ответ было бы интересно услышать.Потому что вышесказанное я так понимаю все теория


 
Vetal ©   (2003-11-18 16:53) [6]

2Silver Alex: Конечно можно:

MyProc.ExecProc();
for i := 0 to MyProc.Fields.Count - 1 do
DoSomething(MyProc.Fields[i].Value);

Я сам как раз сейчас этим занимаюсь.


 
Silver Alex ©   (2003-11-18 17:04) [7]


> 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 18:53) [8]

Я думаю это сделать можно. Покопайся в системных таблицах и системных хранимых процедурах, через них по идее можно получить информацию о хранимых процедурах с описанием всех параметров.


 
Johnmen ©   (2003-11-18 23:07) [9]

>Vetal ©

Динамическое изменение количества возвращаемых ХП параметров ?
Это новая, еще не открытая никем страница в функциональности IB !
А может быть это недокументированная фича ?
:)))


 
stud ©   (2003-11-19 09:40) [10]

а вообще это наверное идея, переписывать процедуры во время выполнения.....


 
Zacho ©   (2003-11-19 09:50) [11]


> stud © (19.11.03 09:40) [10]

Плохая идея, уж поверь.


 
stud ©   (2003-11-19 09:51) [12]

мы комсомольцы легкого пути не ищем))))


 
Danilka ©   (2003-11-19 10:00) [13]

только вот, нафига все это нужно???
обычное дело, формировать запрос на клиенте, с любым кол-вом возвращаемых колонок, хоть десять, хоть двадцать и даже 13 можно.


 
Малиновский Владимир   (2003-11-19 13:01) [14]

Нельзя


 
Vetal ©   (2003-11-19 16:59) [15]

Человек спрашивал:

> Silver Alex © (18.11.03 16:00) [5]
> а разве можно сделать чтобы хранимая процедура возвращала
> неизвестно сколько колонок?


Возвращать то она может неизвестно скоко колонок. Их легко посмотреть на клиенте. А вот на сервере, если неизвестно, сколько процедура возвращает колонок, возможно это можна было бы посмотреть используя системные таблицы. Но мне все таки кажется, что этого нельзя. На самом ЭсКуЭл сервере я этого не делал.


> Johnmen © (18.11.03 23:07) [9]
>
> Динамическое изменение количества возвращаемых ХП параметров
> ?


не количество возвращаемых параметров, а количество возвращаемых колонок. Ты не путай! И никаких процедур не нужно при этом переписывать во время выполнения.

Вобще я у себя ща пишу прогу с использованием МС ЭсКуэЛ Сервера. Есть в ней такая штука. ХП внутри себя строит динамический запрос, возвращает набор на клиента, он определяет количество и типы колонок, и соотв образом их обрабатывает.


 
Johnmen ©   (2003-11-19 17:20) [16]

>Vetal © (19.11.03 16:59) [15]
>не количество возвращаемых параметров, а количество возвращаемых колонок. Ты не путай!

По-моему, путаешь ты. А еще путаешь IB с MSSQL.


 
stud ©   (2003-11-19 17:23) [17]

нет, а в чем проблема на клиенте указать количество возвращаемых колонок? зачем этим должен заниматься сервер? к тому MS SQL и Interbase немного разные звери))


 
Малиновский Владимир   (2003-11-19 17:26) [18]

Ну нельзя!


 
stud ©   (2003-11-19 17:28) [19]


> Малиновский Владимир (19.11.03 17:26) [18]

чего нельзя?


 
Малиновский Владимир   (2003-11-19 17:30) [20]

Ничего нельзя!


 
stud ©   (2003-11-19 17:33) [21]

это правильно)))


 
Silver Alex ©   (2003-11-19 18:17) [22]


> Человек спрашивал:
>
> > Silver Alex © (18.11.03 16:00) [5]
> > а разве можно сделать чтобы хранимая процедура возвращала
>
> > неизвестно сколько колонок?
>
>
> Возвращать то она может неизвестно скоко колонок. Их легко
> посмотреть на клиенте. А вот на сервере, если неизвестно ...
> я этого не делал.

это был риторический вопрос, ты сам бы попробовал


 
Dmitry Glukhov   (2003-11-21 12:54) [23]

А что находится в этих колонках, если это одни и те же данные, отличающиеся доп.свойствами (например, суммы затрат по разным подразделениям)? Тогда проще хранить в 3й нормальной форме и делать выборку по этому свойству (отдельный столбец) а на клиенте строить сводную таблицу в Excel"е или разворачивать данные другими средствами



Страницы: 1 вся ветка

Текущий архив: 2003.12.12;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.024 c
14-36829
Holy
2003-11-07 15:53
2003.12.12
ПДУ для PC


1-36664
hooky-mars
2003-11-30 15:34
2003.12.12
Как остледить обращения к файлам


1-36667
Micah'GF
2003-11-29 20:51
2003.12.12
strung => array of byte


1-36685
akuman
2003-12-02 18:02
2003.12.12
Связь IDispatch с TWordApplication


3-36564
Russko
2003-11-20 14:07
2003.12.12
ORDER BY