HSQL(インメモリ・テスト用)とOracle DB(プロダクション用)で実行する必要があるネイティブ・クエリはありますが、問合せキーワード "RECURSIVE"はHSQLデータベースであり、Oracleでは許可されていません。両方のステートメントを両方のエンジンで実行する必要があるので、いくつかの共通の類似した演算子がありますか?oracleからのオペレータをhsqlデータベースで動作させる
のOracleクエリは次のとおりです。
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;
。
再帰的CTEをサポートするOracle 12cにアップグレードします。 –
すでにOracle 12cとCTEがありますが、問題はH2SQLデータベースに必要な「再帰的」キーワードだけです。 –
@ GordonLinoff再帰CTEは、Oracle 11gでもサポートされています。 – Sentinel