Есть таблица дерева:
KOD_SUBUSER - VARCHAR - узел (наименование)
KOD_USER - VARCHAR - родительский узел (наименование)
необходимо от заданного узла раскрыть дерево, с добавлением поля "уровень в дереве"
Процедура полного "раскрытия" узла дерева:
Код: Выделить всё
ALTER PROCEDURE EXPAND (AnID VARCHAR(32), Self INTEGER)
RETURNS (ID VARCHAR(32), PARENT_ID VARCHAR(32), TREE_LEVEL INTEGER)
AS
BEGIN
TREE_LEVEL = 0;
IF (:Self <> 0) THEN
BEGIN
ID = :AnID;
SUSPEND;
END
FOR SELECT KOD_SUBUSER FROM STRUCT_USERS
WHERE KOD_USER = :AnID
INTO :ID
DO FOR SELECT ID, :ID, TREE_LEVEL+1 FROM EXPAND (:ID, 1)
INTO :ID, :PARENT_ID, :TREE_LEVEL
DO SUSPEND;
END;
что подставлять в качестве 2-го выходного параметра в запросе:
SELECT ID, :ID, TREE_LEVEL+1 FROM EXPAND (:ID, 1) INTO :ID,
