XMLTABLE
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
一些方言附带一个内置的标准 SQL 表值函数,称为 XMLTABLE,可用于将 XML 数据结构解嵌套到 SQL 表中。
SELECT *
FROM xmltable('//row'
PASSING
'<rows>
<row><a>5</a><b><x>10</x></b></row>
<row><a>7</a><b><y>20</y></b></row>
</rows>'
COLUMNS
id FOR ORDINALITY,
a INT,
x INT PATH 'b/x',
y INT PATH 'b/y'
)
create.select()
.from(xmltable("//row")
.passing(xml(
"<rows>"
+ "<row><a>5</a><b><x>10</x></b></row>"
+ "<row><a>7</a><b><y>20</y></b></row>"
+ "</rows>"
))
.column("id").forOrdinality()
.column("a", INTEGER)
.column("x", INTEGER).path("b/x")
.column("y", INTEGER).path("b/y"))
.fetch();
结果如下
+----+---+----+----+ | ID | A | X | Y | +----+---+----+----+ | 1 | 5 | 10 | | | 2 | 7 | | 20 | +----+---+----+----+
方言支持
此示例使用 jOOQ
selectFrom(xmltable("//row").passing(xml("<rows><row><a>5</a><b><x>10</x></b></row></rows>")).column("id").forOrdinality().column("a", INTEGER).column("x", INTEGER).path("b/x"))
翻译成以下特定方言的表达式
DB2,Teradata
SELECT id, a, x
FROM XMLTABLE(
'//row'
PASSING '<rows><row><a>5</a><b><x>10</x></b></row></rows>'
COLUMNS
id FOR ORDINALITY,
a integer,
x integer PATH 'b/x'
)
Hana
SELECT id, a, x
FROM XMLTABLE(
'//row'
PASSING '<rows><row><a>5</a><b><x>10</x></b></row></rows>'
COLUMNS
id FOR ORDINALITY,
a integer PATH 'a',
x integer PATH 'b/x'
)
Oracle
SELECT id, a, x
FROM XMLTABLE(
'//row'
PASSING '<rows><row><a>5</a><b><x>10</x></b></row></rows>'
COLUMNS
id FOR ORDINALITY,
a number(10),
x number(10) PATH 'b/x'
)
Postgres
SELECT id, a, x
FROM XMLTABLE(
'//row'
PASSING CAST('<rows><row><a>5</a><b><x>10</x></b></row></rows>' AS xml)
COLUMNS
id FOR ORDINALITY,
a int,
x int PATH 'b/x'
)
SQLServer
SELECT id, a, x
FROM (
SELECT
row_number() OVER (ORDER BY (
SELECT 1
)) id,
t2.x.value('(a)[1]', 'int') a,
t2.x.value('(b/x)[1]', 'int') x
FROM (
SELECT CAST('<rows><row><a>5</a><b><x>10</x></b></row></rows>' AS xml)
) t1 (x)
CROSS APPLY t1.x.nodes('//row') t2 (x)
)
ASE, Access, Aurora MySQL, Aurora Postgres, BigQuery, ClickHouse, CockroachDB, Databricks, Derby, DuckDB, Exasol, Firebird, H2, HSQLDB, Informix, MariaDB, MemSQL, MySQL, Redshift, SQLDataWarehouse, SQLite, Snowflake, Sybase, Trino, Vertica, YugabyteDB
/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!