Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Иерархия в IB [D7, IB6.x]


Seven ©   (2003-06-15 10:23:00) 

Ув. коллеги. Есть таблица со след. структурой
GOODS
(ID NUMERIC,
NAME VARCHAR(128),
MASTER_ID NUMERIC REFERENCES GOODS(ID)
)
Если есть след. записи:
1 Комплектующие NULL
2 Мат. плата 1
3 IWill 2
4 BD v133 3

Хотелось бы в Select-e выводить так:
Комплектующие NULL\Мат. плата\IWill\BD v133
В Оракле есть прекрасная конструкция
Connect by prior, Start with
Можно ли как-то средствами IB это решить?
Хотя бы выводить верхний уровень + последний ?


Seven   (2003-06-16 11:33:00) [1]

Спасибо большое,
все получилось - оформир
процедурой (базу для процедуры
взял здесь же из статьи про иерархию)
и вызываю в Делфе на CalcFields - работает быстро


Sergey Masloff   (2003-06-15 10:55:00) [2]

Что-то вроде этого:
CREATE PROCEDURE DICTI_DOWN (
PLEVEL INTEGER,
PPARENTISN NUMERIC(15,4))
RETURNS (
F_LEVEL INTEGER,
F_ISN NUMERIC(15,4),
F_PARENTISN NUMERIC(15,4),
F_SHORTNAME VARCHAR(40)
)
AS
begin
for select
d.ISN ,
d.PARENTISN ,
d.SHORTNAME
from dicti d
where d.parentisn = :pPARENTISN

into
:F_ISN ,
:F_PARENTISN ,
:F_SHORTNAME

do
begin
F_LEVEL=pLevel;
suspend;
for select
F_LEVEL ,
F_ISN ,
F_PARENTISN,
F_SHORTNAME
from DICTI_DOWN( :F_LEVEL + 1, :F_ISN)
into
:F_LEVEL ,
:F_ISN ,
:F_PARENTISN ,
:F_SHORTNAME
do
begin
suspend;
end
end
end


Sergey Masloff   (2003-06-15 10:34:00) [3]

Seven ©
>В Оракле есть прекрасная конструкция
>Connect by prior, Start with
За наличие таких возможностей в Oracle приходится платить (не только и не столько деньгами)
В IB такую функциональность можно достичь используя рекурсию в хранимой процедуре.


Наверх

Титульная страница Поиск, карта сайта Написать письмо