![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамические структуры [D6, FB 2.0]
O.O © (2007-04-26 08:38:00)Можно ли в хранимых процедурах использовать какие-нибудь динамические структуры аналогичные паскалевским типа:
Type
PStruct = ^Struct;
Struct = Record
Next: PStruct;
Value1: string;
Value2, Value3: Integer;
// и т.д.
end;
И соответствующие операторы типаNew, Disposeдля создания стеков и списков в памяти?
O.O (2007-04-26 12:17:00) [21]
> Jan1 (26.04.07 12:08) [16]
> читать: http://ibase.ru/develop.htm- Древовидные и иерархические
> структуры, хранение объектов
Спасибо, буду читать :)
O.O (2007-04-26 12:13:00) [22]
> Jan1 (26.04.07 11:18) [12]
А как ентим пользоваться?
Jan1 (2007-04-26 12:08:00) [23]читать: http://ibase.ru/develop.htm- Древовидные и иерархические структуры, хранение объектов
O.O (2007-04-26 11:55:00) [24]Да кстати, сделать это с рекурсией получается, но где-то читал что FireBird делает ограничение до 1000 и после этого выдаёт ошибку. Напороться на это где-нибудь в будующем, когда количество данных будет увеличиваться хочется не очень.
O.O (2007-04-26 11:50:00) [25]Я вот как раз и не хочу создавать временных таблиц, потому как врядли это эффективный путь решения. Может лучше обьясню в кратце проблему:
Одна таблица с первичными записями. В её составе нас интерисуют два поля:
KOD - первичный индекс.
LEVEL - уровень вложения, т.е. любая запись этой таблицы как-бы состоит из набора записей этой-же таблицы, и это поле отражает глубину вложенности.
Вторая таблица описывает структуру записей первой таблицы. Для управления вложенностью записей два поля:
MASTER_KOD - Ссылка на поле KOD первой таблицы (корневая запись структуры)
SLAVE_KOD - Сылка на поле KOD первой таблицы (составляющая структуры).
Отношения между таблицами - один ко многим по полям KOD/MASTER_KOD и соответственно один к одному по полям SLAVE_KOD/KOD. Остальные поля таблицы для создания алгоритма значения не имеют.
Нужно сделать следующее:
1. По полю KOD первой таблицы получить все составляющие из этой-же таблицы, т.е. развернуть её до элементов с нулевыми уровнями вложенности.
3. Вычислять уровень вложенности
2. Во время создания структуры следить чтоб не возникло циклических ссылок.
Как это делать при помощи SQL без временных таблиц ума не приложу. Легко это сделал в Delphi, однако во время разворачивания структуры для разворачивания каждой сложной составляющей создаётся новый запрос, пока вся структура не развернётся до элементарных составляющих. Через сеть думаю это делать неразумно. Вот вобщем-то и всё.
Val (2007-04-26 11:23:00) [26]спасибо.
ну тогда вот и пожалуйста - желаемые автором динамические структуры.
Jan1 (2007-04-26 11:18:00) [27]
> offtop: они вроде в 2.1 temporary tables обещали... - появились?
http://www.firebirdsql.org/devel/doc/rlsnotes/html/rlsnotes21.html#rnfb21a-new-obj
Jan1 (2007-04-26 11:18:00) [28]
> offtop: они вроде в 2.1 temporary tables обещали... - появились?
http://www.firebirdsql.org/devel/doc/rlsnotes/html/rlsnotes21.html#rnfb21a-new-obj
Val (2007-04-26 11:15:00) [29]offtop: они вроде в 2.1 temporary tables обещали... - появились?
Desdechado (2007-04-26 11:02:00) [30]Твои динамические структуры - это, по факту, таблицы.
Только не вздумай их создавать и убивать не лету. Лучше создай однажды заранее. И помни, что в многопользовательском режиме придется отличать данные каждого пользователя от чужих. Хотя это может быть неактуально, если все делается в одной транзакции с последующим откатом.
ЗЫ Вообще лучше поищи другой способ гонять свои алгоритмы. Потому как замучаешь свой сервер (а он - тебя) сборкой мусора.
O.O (2007-04-26 10:57:00) [31]Так значит ответ на вопрос - НЕТ
Всё делается только средствами SQL
Jan1 (2007-04-26 10:51:00) [32]
> а как это эффективно сделать при помощи только SQL запросов
> не знаю, хотя конечно не утверждаю что нельзя, потому-что
> не всё об SQL знаю а о некоторых вещах наверно и не догадываюсь.
>
вот с этого и надо начинать, а именно: "где взять литературу по SQL".
http://www.google.ru/search?sourceid=navclient-ff&ie=UTF-8&rls=GGGL,GGGL:2006-29,GGGL:ru&q=%D0%93%D1%80%D1%83%D0%B1%D0%B5%D1%80+%D0%BF%D0%BE%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D0%B5+SQL
O.O (2007-04-26 10:45:00) [33]
> Johnmen © (26.04.07 10:13) [3]
Но в данном случае и дела-то нет никакого...
А почему никакого, как-то совсем подругому решается? Или я вообще про какие-то глупости спросил?
O.O (2007-04-26 10:30:00) [34]
> Jan1 (26.04.07 10:17) [4]
Некоторые алгоритмы очень легко создать при помощи этих структур, а как это эффективно сделать при помощи только SQL запросов не знаю, хотя конечно не утверждаю что нельзя, потому-что не всё об SQL знаю а о некоторых вещах наверно и не догадываюсь.
Jan1 (2007-04-26 10:17:00) [35]
> Можно ли в хранимых процедурах использовать какие-нибудь
> динамические структуры аналогичные паскалевским типа
а зачем? в чем сакральная мысля?
Johnmen (2007-04-26 10:13:00) [36]
> но хороший совет по делу очень сильно ускоряет процесс
Безусловно.
Но в данном случае и дела-то нет никакого...
O.O (2007-04-26 09:48:00) [37]
> Johnmen © (26.04.07 09:05) [1]
Наверно да, но хороший совет по делу очень сильно ускоряет процесс, показывая в какую сторону копать :)
Johnmen (2007-04-26 09:05:00) [38]Может проще и надёжней документацию почитать?