Oracle 中的 XMLQuery
XMLQuery in Oracle
我想从以下数据库中过滤一些元素:
`CREATE TABLE Club
( name VARCHAR2(30),
championship XMLTYPE);`
XML 部分如下所示:
`INSERT INTO Club VALUES ('FC Arsenal',
'<championship>
<champion no="13">
<league>PremierLeague</league>
<year>2004</<year>
</champion>
<champion no="11">
<league>FA_Cup</league>
<year>2014</year>
</champion>
</championship>'
);`
我想过滤俱乐部的名称和年份,但前提是球队赢得了英超联赛。
我的解决方案如下所示:
`SELECT Name, XMLQuery(
'for $i in /championship
where $i/champion/league = "PremierLeague"
return $i/champion/year
PASSING Club RETURNING content) As year
FROM Club;`
我不确定如何组合查询,因此名称取决于 xmlquery。现在我得到了所有俱乐部的名字,即使他们没有赢得英超联赛。另一个问题是我得到了名字,但年份是 (null)。
怎么了?
谢谢
只需将其作为 XMLExists 添加到 where 子句中即可:
SELECT Name, XMLQuery(
'for $i in /championship
where $i/champion/league = "PremierLeague"
return $i/champion/year'
PASSING championship RETURNING content) As year
FROM SPFEV.Club where XMLExists(
'$i/championship/champion/@league[.="PremierLeague"]'
PASSING championship as "i");
这在语法上是正确的,我知道 where 部分是正确的,但我不太确定你所做的部分。
由于一个团队可能已经赢得了一年多的胜利,您最好采用 XML表格方法:
SELECT c.name, x.year
FROM club c
CROSS JOIN XMLTable('/championship/champion'
PASSING c.championship
COLUMNS league VARCHAR2(20) PATH 'league',
year NUMBER PATH 'year') x
WHERE x.league = 'PremierLeague';
NAME YEAR
------------------------------ ----------
FC Arsenal 2004
这会从 XML 中获取年份和联赛,然后过滤联赛名称。
我想从以下数据库中过滤一些元素:
`CREATE TABLE Club
( name VARCHAR2(30),
championship XMLTYPE);`
XML 部分如下所示:
`INSERT INTO Club VALUES ('FC Arsenal',
'<championship>
<champion no="13">
<league>PremierLeague</league>
<year>2004</<year>
</champion>
<champion no="11">
<league>FA_Cup</league>
<year>2014</year>
</champion>
</championship>'
);`
我想过滤俱乐部的名称和年份,但前提是球队赢得了英超联赛。
我的解决方案如下所示:
`SELECT Name, XMLQuery(
'for $i in /championship
where $i/champion/league = "PremierLeague"
return $i/champion/year
PASSING Club RETURNING content) As year
FROM Club;`
我不确定如何组合查询,因此名称取决于 xmlquery。现在我得到了所有俱乐部的名字,即使他们没有赢得英超联赛。另一个问题是我得到了名字,但年份是 (null)。
怎么了?
谢谢
只需将其作为 XMLExists 添加到 where 子句中即可:
SELECT Name, XMLQuery(
'for $i in /championship
where $i/champion/league = "PremierLeague"
return $i/champion/year'
PASSING championship RETURNING content) As year
FROM SPFEV.Club where XMLExists(
'$i/championship/champion/@league[.="PremierLeague"]'
PASSING championship as "i");
这在语法上是正确的,我知道 where 部分是正确的,但我不太确定你所做的部分。
由于一个团队可能已经赢得了一年多的胜利,您最好采用 XML表格方法:
SELECT c.name, x.year
FROM club c
CROSS JOIN XMLTable('/championship/champion'
PASSING c.championship
COLUMNS league VARCHAR2(20) PATH 'league',
year NUMBER PATH 'year') x
WHERE x.league = 'PremierLeague';
NAME YEAR
------------------------------ ----------
FC Arsenal 2004
这会从 XML 中获取年份和联赛,然后过滤联赛名称。