sql >> データベース >  >> RDS >> Oracle

XPathを使用してOracleデータベースにクエリを実行するときに、文字列ではなく値のリストを返すにはどうすればよいですか?

    EXTRACT (およびEXTRACTVALUE )は非推奨の関数です。 XMLTABLEを使用する必要があります 代わりに:

    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  
    

    (追加情報のためだけに役割列を含めました。XMLTABLEの列リストからその列を削除するだけです。 見る必要がない場合は一部です。)




    1. Oracle PL /SQLUTL_FILE.PUTバッファリング

    2. Railsアプリでリレーションシップモデルからレコードのリストを見つけて表示する際の問題

    3. MySQL:値の優先順位による列の取得

    4. 1114(HY000):テーブルがいっぱいです