使来自 oracle 的 Operator WITH 在 hsql 数据库中工作
Make Operator WITH from oracle work in hsql database
我有一个本机查询需要在 HSQL(用于内存中测试)和 Oracle DB(用于生产)中 运行,但是,查询关键字 "RECURSIVE" 在 HSQL 中是必需的数据库,在oracle中是不允许的。因为我需要两个引擎上的两个语句 运行,所以有一些常见的类似运算符?
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;
我需要一些可以 运行 超过两个引擎的替代方案。
最新的HSQLDB代码(post 2.3.4)在Oracle语法兼容模式下支持这个。快照 jar 可从 Maven 存储库获得。
https://oss.sonatype.org/content/repositories/snapshots/org/hsqldb/hsqldb/SNAPSHOT/
我有一个本机查询需要在 HSQL(用于内存中测试)和 Oracle DB(用于生产)中 运行,但是,查询关键字 "RECURSIVE" 在 HSQL 中是必需的数据库,在oracle中是不允许的。因为我需要两个引擎上的两个语句 运行,所以有一些常见的类似运算符?
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;
我需要一些可以 运行 超过两个引擎的替代方案。
最新的HSQLDB代码(post 2.3.4)在Oracle语法兼容模式下支持这个。快照 jar 可从 Maven 存储库获得。
https://oss.sonatype.org/content/repositories/snapshots/org/hsqldb/hsqldb/SNAPSHOT/