0

인 메모리 테스트를 위해 HSQL 및 프로덕션을 위해 Oracle DB에서 실행해야하는 원시 쿼리가 있지만 쿼리 키워드 "RECURSIVE"는 다음과 같이 필요합니다. HSQL 데이터베이스이며 oracle에서는 허용되지 않습니다. 두 엔진 모두에서 두 명령문을 모두 실행해야하기 때문에 몇 가지 공통적 인 연산자가 있습니까?hsql 데이터베이스에서 oracle의 operator with WITH가 작동합니다.

오라클 쿼리는 다음과 같습니다

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

재귀 CTE를 지원하는 Oracle 12c로 업그레이드하십시오. –

+0

우리는 이미 Oracle 12c와 CTE를 가지고 있습니다. 문제는 H2SQL 데이터베이스에 필요한 "재귀 적"키워드뿐입니다. –

+2

@GordonLinoff 재귀 CTE는 Oracle 11g에서도 지원됩니다. – Sentinel

답변