А нефиг внутренние таблицы адресовать. Снаружи виден только TR, его и пытайся апдейтить.

Так я ж не знаю как. Не описано это. Сижу и пробую как попало. Пробовал я и такое:

EXECUTE BLOCK
RETURNS (
  ID INTEGER)
AS
BEGIN
  FOR WITH RECURSIVE TR AS (SELECT * FROM "Tree" WHERE PARENT_ID IS NULL)
    SELECT ID FROM TR INTO :ID AS CURSOR CUR DO
  BEGIN
    UPDATE TR SET NAME = NAME || '!' WHERE CURRENT OF CUR;
    SUSPEND;
  END
END

Говорит:

Invalid cursor reference.
Relation TR is not found in cursor CUR.

И такое:

EXECUTE BLOCK
RETURNS (
  ID INTEGER)
AS
BEGIN
  FOR WITH RECURSIVE TR AS (SELECT * FROM "Tree" WHERE PARENT_ID IS NULL)
    SELECT ID FROM TR INTO :ID AS CURSOR CUR DO
  BEGIN
    UPDATE TR SET NAME = NAME || '!' WHERE ID = 5;
    SUSPEND;
  END
END

Сказало

Table unknown.
TR.


(в т.ч. с пердставлениями и UNION) :-/
Мама родная...

А что? Вон в MS SQL работает :-)

Ответить