Форум: "Базы";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];
ВнизИерархия в IB Найти похожие ветки
← →
Seven (2003-06-15 10:23) [0]Ув. коллеги. Есть таблица со след. структурой
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 это решить?
Хотя бы выводить верхний уровень + последний ?
← →
Sergey Masloff (2003-06-15 10:34) [1]Seven ©
>В Оракле есть прекрасная конструкция
>Connect by prior, Start with
За наличие таких возможностей в Oracle приходится платить (не только и не столько деньгами)
В IB такую функциональность можно достичь используя рекурсию в хранимой процедуре.
← →
Sergey Masloff (2003-06-15 10:55) [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
← →
Seven (2003-06-16 11:33) [3]Спасибо большое,
все получилось - оформир
процедурой (базу для процедуры
взял здесь же из статьи про иерархию)
и вызываю в Делфе на CalcFields - работает быстро
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.009 c