Таблица:
CREATE TABLE BE
(
DB BIGINT,
RN BIGINT,
HDB BIGINT DEFAULT NULL,
HRN BIGINT DEFAULT NULL,
CODE VARCHAR(20),
NAME VARCHAR(254),
CONSTRAINT PK_BE PRIMARY KEY (RN, DB),
CONSTRAINT NB_BE_CODE CHECK (CODE IS NOT NULL),
CONSTRAINT NB_BE_NAME CHECK (NAME IS NOT NULL),
CONSTRAINT UQ_BE_CODE UNIQUE (CODE)
);
Запрос:
WITH RECURSIVE
B AS
(
SELECT
B_H.DB,
B_H.RN,
B_H.HDB,
B_H.HRN,
B_H.CODE,
B_H.NAME,
0 AS LVL
FROM BE B_H
WHERE B_H.HDB IS NULL AND B_H.HRN IS NULL
ORDER BY B_H.NAME
UNION ALL
SELECT
B_L.DB,
B_L.RN,
B_L.HDB,
B_L.HRN,
B_L.CODE,
B_L.NAME,
B.LVL + 1 AS LVL
FROM BE B_L
JOIN B ON B_L.HDB = B.DB AND B_L.HRN = B.RN
ORDER BY B_L.NAME
)
SELECT
B.DB,
B.RN,
B.HDB,
B.HRN,
B.CODE,
IIF(B.LVL > 0, LPAD(B.NAME, CHAR_LENGTH(B.NAME) + 3 * B.LVL, ' '),
B.NAME) AS NAME
FROM
B
Выполнение запроса приводит к ошибке:
Can't format message 13:896 -- message system code -4.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 16, column 5.
UNION.
Версия сервера:
Server Version = WI-T2.1.0.17092 Firebird 2.1 Beta 2
Server Implementation = Firebird/x86/Windows NT
Service Version = 2
Вопрос: ошибка бага или необходимое ограничение на CTE