sql >> Databasteknik >  >> RDS >> Oracle

Hur returnerar jag en lista med värden istället för en sträng när jag frågar efter en Oracle-databas med XPath?

EXTRACT (och EXTRACTVALUE ) är föråldrade funktioner. Du bör använda XMLTABLE istället:

with sample_data as (select xmltype('<film>
    <title>Godfather, The</title>
    <year>1972</year>
    <directors>
        <director>Francis Ford Coppola</director>
    </directors>
    <genres>
        <genre>Crime</genre>
        <genre>Drama</genre>
    </genres>
    <plot>Son of a mafia boss takes over when his father is critically wounded in a mob hit.</plot>
    <cast>
        <performer>
            <actor>Marlon Brando</actor>
            <role>Don Vito Corleone</role>
        </performer>
        <performer>
            <actor>Al Pacino</actor>
            <role>Michael Corleone</role>
        </performer>
        <performer>
            <actor>Diane Keaton</actor>
            <role>Kay Adams Corleone</role>
        </performer>
        <performer>
            <actor>Robert Duvall</actor>
            <role>Tom Hagen</role>
        </performer>
        <performer>
            <actor>James Caan</actor>
            <role>Sonny Corleone</role>
        </performer>
    </cast>
</film>') x from dual)
select x.*
from   sample_data sd,
       xmltable('/film[title="Godfather, The"]/cast/performer' passing sd.x
                columns actor varchar2(50) path '//actor',
                        role varchar2(50) path '//role') x;

ACTOR                                              ROLE                                              
-------------------------------------------------- --------------------------------------------------
Marlon Brando                                      Don Vito Corleone                                 
Al Pacino                                          Michael Corleone                                  
Diane Keaton                                       Kay Adams Corleone                                
Robert Duvall                                      Tom Hagen                                         
James Caan                                         Sonny Corleone  

(Jag har inkluderat rollkolumnen bara för ytterligare information; du skulle bara ta bort den kolumnen från kolumnlistan i XMLTABLE del om du inte behöver se den.)




  1. Mätning av frågeprestanda:Exekveringsplan för frågekostnad kontra tid

  2. mysql infoga ras skick

  3. Skulle följande primärnyckeländring fungera med `pt-online-schema-change`?

  4. Dåliga vanor :Räkna rader den hårda vägen