"Tonal" ...

> Ошибся чуток:

    Да не, не чуток :)

Во-первых, вот так :

WITH RECURSIVE TR AS
(
   SELECT T.*, 1 AS LEV FROM "Tree" T
    WHERE PARENT_ID IS NULL
      AND RDB$SET_CONTEXT('USER_TRANSACTION', 'Level', 0) >= 0

   UNION ALL

   SELECT T.*, TR.LEV + 1 AS LEV FROM "Tree" T, TR
    WHERE PARENT_ID = TR.ID
      AND RDB$SET_CONTEXT('USER_TRANSACTION', 'Level', TR.LEV + 1) >= 0
      AND RDB$GET_CONTEXT('USER_TRANSACTION', 'Level') < 5
)

SELECT ID, LEV FROM TR

Во-вторых, это закладывается на порядок вычисления условий

В-третьих, это всё равно не позволит избежать чтения записей с уровня 5

--
Хорсун Влад


Ответить