0

У меня есть собственный запрос, который необходимо запустить в 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; 

мне нужна альтернатива, которая может работать над обоими двигателями.

+0

Обновление до Oracle 12c, который поддерживает рекурсивный КТР. –

+0

У нас уже есть Oracle 12c и CTE, проблема - это только ключевое слово «Рекурсивное», требуемое базой данных H2SQL. –

+2

Рекурсивные CTE @GordonLinoff поддерживаются и в Oracle 11g. – Sentinel

ответ

1

Последний код HSQLDB (сообщение 2.3.4) поддерживает это в режиме совместимости синтаксиса Oracle. Ярлык для моментального снимка доступен в репозиториях Maven.

https://oss.sonatype.org/content/repositories/snapshots/org/hsqldb/hsqldb/SNAPSHOT/

+0

Спасибо @fredt, я буду обновлять, когда они выпустят окончательную версию, я не могу использовать SNAPSHOT. –

Смежные вопросы