![]() |
|
Модераторы: skyboy |
![]()
|
|
| MacTep |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1292 Регистрация: 4.8.2003 Где: г. Самара Репутация: нет Всего: 4 |
Есть процедура: простая, для теста, чтобы понять, как это работает.
-------------------- (A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :) |
||||
|
|||||
| MacTep |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1292 Регистрация: 4.8.2003 Где: г. Самара Репутация: нет Всего: 4 |
Неужели это невозможно?
-------------------- (A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :) |
|||
|
||||
| MacTep |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1292 Регистрация: 4.8.2003 Где: г. Самара Репутация: нет Всего: 4 |
Значит все-таки никак?
-------------------- (A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :) |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
у тебя переменная объявлена так: одна строка длиной 30 символов. что уж тут удивительного, что процедура возвращает в этой переменной одну строку? вот, если бы у тебя был бы объявлен тип "таблица" - вернул бы несколько строк. Но в MySQL такого типа данных пока нет. Так что при данной постановке вопроса - никак. |
|||
|
||||
| MacTep |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1292 Регистрация: 4.8.2003 Где: г. Самара Репутация: нет Всего: 4 |
-------------------- (A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :) |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
используя сериализацию в виде агрегирующей функции group_concat, можно слить кучу записей в одну строку с разделителями(аналог функции implode), но есть ньюансы:
- используемое в качестве разделителя не может встречаться в "соединяемых" значениях - потом не отделишь одно от другого - есть ограничение на максимальную длину подобной строки: group_concat_max_len; это ограничение можно изменить, но если пользователь имеет права на изменения переменных сервера - необходимо парсить --------------------------- используя динамический SQL с созданием представления(view) с проивзольным генерируемым именем, которое ты и будешь возвращать, а после обработки - прибивать. если имя представления будет достаточно уникальным(всякие там GUID() для генерации приветствуются), то коллизий не будет. Но я не уверен, что такой подход реально реализовать: это только идея. динамический SQL точно не работает в функциях(даже если оно используется не напрямую, а из процедуры, вызываемой из функции). может и в процедурах быть какие-то ограничения. я не в курсе :( --------------------------- в любом случае, на твоем месте я бы попытался поставить задачу так, чтоб для её решения не использовались приёмы, нетипичные для работы с реляционными СУБД(всякие там динамические SQL и сериализация с парсингом - это костыли) |
|||
|
||||
| MacTep |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1292 Регистрация: 4.8.2003 Где: г. Самара Репутация: нет Всего: 4 |
-------------------- (A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :) |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
MacTep, в смыле? не знаю, как для FireBird, а в MSSQL имеется тип данных TABLE. Вот при помощи такого "структурного" типа данных и можно возвращать несколько записей. А вот динамически создавать View, или объединять на стороне СУБД записи в одну строку, а потом на стороне клиента парсить - вот ЭТО считаю не лучшим применением РСУБД.
я ж так и написал:
что, неужели под FireBird повсеместно используется "склейка" в строку с последующим парсингом?! |
|||
|
||||
| MacTep |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1292 Регистрация: 4.8.2003 Где: г. Самара Репутация: нет Всего: 4 |
А я и не собираюсь это применять. ;) А в firebird просто можно при помощи suspend возвращать то, что надо в хранимой процедуре. -------------------- (A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :) |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |