![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Определение потомков в древовдном расположение данных [D6, IB6.x]
me2 © (2003-06-11 14:38:00)Помогите написать ХП, которая отображала бы всех потомков некоторого узла. Таблица имеет следующую структуру:
group_code group_name group_parent
me2 (2003-06-11 16:00:00) [1]2 bSava © (11.06.03 15:47)
Да, ты правильно понял. Работает. Спасибо.
bSava (2003-06-11 15:47:00) [2]
CREATE PROCEDURE TREE_ID (
ID_ROD INTEGER)
RETURNS (
ID_TREE INTEGER)
AS
DECLARE VARIABLE ID INTEGER;
begin
/* select group_code from TABLE where group_code = :id_rod;*/
for select tp1.group_code
from tipvlog tp1
where tp1.group_parent = :id_rod into :id_tree
do
begin
if (not exists(select * from TABLE
where TABLE.group_parent = :id_tree)) then
begin
suspend;
end
else
begin
id = id_tree;
for
select id_tree from tree_id (:id_tree) into : id_tree
do begin
suspend;
end
id_tree = id;
suspend;
end
end
end
вот тебе код для таблицы ели я правильно понял смысл твоих полей
me2 (2003-06-11 15:41:00) [3]Да, я знаю, что нужно использовать рекурсию и написал следующие
CREATE PROCEDURE GET_MATERIALS_GROUP_PARENTS (
I_GROUP_CODE INTEGER)
RETURNS (
GROUP_PARENT_CODE INTEGER)
AS
DECLARE VARIABLE I_G_CODE INTEGER;
begin
for select "material_group_parent" from material_groups where
"material_group_code" = :i_group_code
into :group_parent_code
do
begin
while (:group_parent_code is not null) do
begin
for
select * from GET_MATERIALS_GROUP_PARENTS(:group_parent_code)
into :group_parent_code
do
begin
suspend;
end
end
end
end
Но данный код не работает. Поправте, пожалуйста.
Жук (2003-06-11 15:08:00) [4]Рекурсивное обращение к ХП, должно спасти отца русской демократии