У меня есть собственный запрос, который необходимо запустить в HSQL (для тестов в памяти) и в Oracle DB (для производства), однако ключевое слово запроса RECURSIVE требуется в Базу данных HSQL и не допускается в oracle. Так как мне нужно, чтобы оба оператора выполнялись на обоих двигателях, существует какой-то общий аналогичный оператор?Сделать оператор WITH из oracle работать в базе данных hsql
Запрос оракул:
WITH contexts (ID, CONTEXT_ID, NAME, LABEL_KEY, VERSION, parent_name, parent_id, lev)
AS (
SELECT t1.ID, t1.CONTEXT_ID, t1.NAME, LABEL_KEY, VERSION, NULL AS parent_name, NULL AS parent_id, 1 AS lev
FROM PIM_CONTEXT t1 WHERE t1.ID =1
UNION ALL
SELECT t2.ID, t2.CONTEXT_ID, t2.NAME, t2.LABEL_KEY, t2.VERSION, contexts.NAME AS parent_name, contexts.ID AS parent_id, lev + 1 AS lev
FROM contexts
JOIN PIM_CONTEXT t2 ON t2.context_id = contexts.id
)
SELECT ID, CONTEXT_ID, NAME, LABEL_KEY, VERSION, parent_name, parent_id FROM contexts;
и запрос, который имеет тот же выход в HSQL является:
WITH contexts recursive (ID, CONTEXT_ID, NAME, LABEL_KEY, VERSION, parent_name, parent_id, lev)
AS (
SELECT t1.ID, t1.CONTEXT_ID, t1.NAME, LABEL_KEY, VERSION, NULL AS parent_name, NULL AS parent_id, 1 AS lev
FROM PIM_CONTEXT t1 WHERE t1.ID =1
UNION ALL
SELECT t2.ID, t2.CONTEXT_ID, t2.NAME, t2.LABEL_KEY, t2.VERSION, contexts.NAME AS parent_name, contexts.ID AS parent_id, lev + 1 AS lev
FROM contexts
JOIN PIM_CONTEXT t2 ON t2.context_id = contexts.id
)
SELECT ID, CONTEXT_ID, NAME, LABEL_KEY, VERSION, parent_name, parent_id FROM contexts;
мне нужна альтернатива, которая может работать над обоими двигателями.
Обновление до Oracle 12c, который поддерживает рекурсивный КТР. –
У нас уже есть Oracle 12c и CTE, проблема - это только ключевое слово «Рекурсивное», требуемое базой данных H2SQL. –
Рекурсивные CTE @GordonLinoff поддерживаются и в Oracle 11g. – Sentinel