21 дек. 2012 г.

Путь к элементу дерева через EXECUTE BLOCK

Раньше уже обсуждалось использование рекурсивного CTE для получения пути к элементу древовидной иерархии. То же самое можно сделать и без CTE с использованием конструкции EXECUTE BLOCK:
EXECUTE BLOCK (ID INTEGER = :ID)
  RETURNS(Path VARCHAR(8192))
AS
BEGIN
  Path = '';
  WHILE (:ID IS DISTINCT FROM NULL) DO
  BEGIN
    SELECT name || '\' || :Path, parent 
    FROM gd_contact
    WHERE id = :ID
    INTO :Path, :ID;
  END
  Path = SUBSTRING(:Path FROM 1 
    FOR CHARACTER_LENGTH(:Path) - 1);
  SUSPEND;
END

Комментариев нет:

Отправить комментарий