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 中获取年份和联赛,然后过滤联赛名称。