CTE в процедуре (ХП)

Модераторы: kdv, CyberMax

Ответить
vikos78
Сообщения: 2
Зарегистрирован: 18 июн 2009, 11:08

CTE в процедуре (ХП)

Сообщение vikos78 » 18 июн 2009, 12:59

Добрый день.
Возможно ли реализовать CTE в процедуре? Вроде вопрос то простой, но не выходит.

Код: Выделить всё

create procedure myProc(idin Integer)
returns (id integer, namestruct varchar(100), lev integer, path varchar(100))
AS
begin
     WITH RECURSIVE R_TREE_FORWARD (ID, L, PATH)
     AS
     (
     SELECT ID, 0, CAST(ID AS VARCHAR(255))
     FROM TREE
     WHERE TREE.PARENT_ID=:idin

     UNION ALL

     SELECT TREE.ID, R_TREE_FORWARD.L + 1,R_TREE_FORWARD.PATH || '.' ||CAST(TREE.ID AS VARCHAR(8))
     FROM TREE, R_TREE_FORWARD
     WHERE TREE.PARENT_ID = R_TREE_FORWARD.ID
     AND R_TREE_FORWARD.L < 1000
     )

     FOR
     SELECT TREE.ID,TREE.NAMESTRUCT, R_TREE_FORWARD.L, R_TREE_FORWARD.PATH
     FROM TREE, R_TREE_FORWARD
     WHERE TREE.ID = R_TREE_FORWARD.ID
     into :id, :namestruct, :lev, :path
     DO
     BEGIN
       SUSPEND;
     END

end;
Простая процедура, простое исполнения, но не компилится. Token unknown - line 23, column 6 FOR
Может этого делать нельзя?

С уважением.

Gera
Сообщения: 53
Зарегистрирован: 12 мар 2008, 17:34

Re: CTE в процедуре (ХП)

Сообщение Gera » 18 июн 2009, 13:08

WITH - это часть предложения SELECT

Код: Выделить всё

FOR
WITH RECURSIVE ...
SELECT ...

vikos78
Сообщения: 2
Зарегистрирован: 18 июн 2009, 11:08

Re: CTE в процедуре (ХП)

Сообщение vikos78 » 18 июн 2009, 13:27

Да!
Огромное спасибо.
С уважением.

Ответить