Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak zwrócić listę wartości zamiast ciągu podczas wykonywania zapytań do bazy danych Oracle przy użyciu XPath?

EXTRACT (i EXTRACTVALUE ) to przestarzałe funkcje. Powinieneś użyć XMLTABLE zamiast tego:

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  

(Dołączyłem kolumnę roli tylko dla dodatkowych informacji; po prostu usuniesz tę kolumnę z listy kolumn w XMLTABLE część, jeśli nie musisz tego widzieć).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy istnieje najlepszy sposób na uniknięcie wykonywania procesu więcej niż raz w Oracle?

  2. jak zrobić wyzwalacz, taki jak ograniczenie klucza podstawowego?

  3. Jak uzyskać ostatnią wykonaną instrukcję SQL i powiązać wartości zmiennych w oracle?

  4. Jak wybrać pierwszą 1 i uporządkowaną według daty w Oracle SQL?

  5. Masowe aktualizacje właściwości raportów i formularzy Oracle 11g