通过select在oracle中提取xml参数的最佳方法

the best way to extract parameters of a xml in oracle through select

我在 xml oracle 中有一个目录,但作为结构的提取值 xml 例如;

<Estaciones>
  <Estacion>
    <Nombre>Primavera</Nombre>
      <Inicia>Marzo</Inicia>
        <Termina>Septiembre</Termina>
   </Estacion>
</Estaciones>
等等所有季节

然后做一个select来比较每个inicioMes和结果站, 这是: TABLE (XMLSEQUENCE (EXTRACT ())) 我在 oracle xml 类型中提取了一个 table,但是作为提取参数,我认为使用 SELECT EXTRACTVALUE (),但它的结构。

由于要提取多组值,因此可以使用 XMLTable with a suitable XPath。从所提供的少量信息来看,这是一个起点:

select x.*
from <your_table> t
cross join xmltable ('/Estaciones/Estacion'
  passing t.<your_xmltype_column>
  columns nombre varchar2(9) path 'Nombre',
    inicia varchar2(10) path 'Inicia',
    termina varchar2(10) path 'Termina'
) x;

带有虚构的第二季的快速演示:

with t42 as (
  select xmltype('<Estaciones>
  <Estacion>
    <Nombre>Primavera</Nombre>
    <Inicia>Marzo</Inicia>
    <Termina>Septiembre</Termina>
  </Estacion>
  <Estacion>
    <Nombre>Otoño</Nombre>
    <Inicia>Octubre</Inicia >
    <Termina>Febrero</Termina>>
  </Estacion>
</Estaciones>') as xml_col
  from dual
)
select x.*
from t42 t
cross join xmltable ('/Estaciones/Estacion'
  passing t.xml_col
  columns nombre varchar2(9) path 'Nombre',
    inicia varchar2(10) path 'Inicia',
    termina varchar2(10) path 'Termina'
) x;

NOMBRE     INICIA     TERMINA   
---------- ---------- ----------
Primavera  Marzo      Septiembre 
Otoño      Octubre    Febrero    

恐怕我不知道你问题的第二部分是什么意思,但这可能会让你上路。