Забыл еще рекурсивную процедуру
CREATE PROCEDURE GET_TREE_LINE (
INSET_ID INTEGER,
INMEM_PID INTEGER,
INLEVEL INTEGER)
RETURNS (
MEM_PID INTEGER,
MEM_ID INTEGER,
OUTLEVEL INTEGER,
IS_LEAF INTEGER,
MEM_ORDER INTEGER)
AS
DECLARE VARIABLE CHILDID INTEGER;
begin
for select a.MEM_ID, a.mem_order from LINE_TREE a
where a.MEM_PID = :InMEM_PID and a.set_id=:inset_id
into :ChildID, :MEM_ORDER
do
begin
MEM_PID = :InMEM_PID;
MEM_ID = :ChildID;
OutLevel = :InLevel + 1;
if (exists(select 1 from LINE_tree a where
a.set_id=:inset_id and a.mem_pid=:mem_id))then
IS_LEAF=0;
else
IS_LEAF=1;
Suspend;
for select MEM_ID, OUTLEVEL, MEM_PID,IS_LEAF, MEM_ORDER from
GET_TREE_LINE
(:inset_id,:MEM_ID, :OutLevel)
into :MEM_ID, :OutLevel, :MEM_PID,:is_leaf, :MEM_ORDER
do
Suspend;
end
end
--~--~---------~--~----~------------~-------~--~----~
-~----------~----~----~----~------~----~------~--~---