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

Od XML do listy ścieżek w środowisku Oracle PL/SQL

Możesz użyć XMLTable aby utworzyć listę ścieżek za pomocą XQuery.

Np.

(SQLFiddle )

with params as (
  select 
    xmltype('
      <ALFA>
        <BETA>0123</BETA>
        <GAMMA>2345</GAMMA>
        <DELTA>
           <EPSILON>3</EPSILON>
        </DELTA>
      </ALFA>
    ') p_xml
  from dual  
)    
select
  path_name || '/text()'
from
  XMLTable(
    '
      for $i in $doc/descendant-or-self::*
        return <element_path> {$i/string-join(ancestor-or-self::*/name(.), ''/'')} </element_path>
    '
    passing (select p_xml from params) as "doc"
    columns path_name varchar2(4000) path '//element_path'
  )

ale jest to zły sposób, przynajmniej dlatego, że nie jest tak skuteczny, jak może.

Po prostu wyodrębnij wszystkie wartości za pomocą tego samego XQuery:(SQLFiddle )

with params as (
  select 
    xmltype('
      <ALFA>
        <BETA>0123</BETA>
        <GAMMA>2345</GAMMA>
        <DELTA>
           <EPSILON>3</EPSILON>
        </DELTA>
      </ALFA>
    ') p_xml
  from dual  
)    
select
  element_path, element_text
from
  XMLTable(
    '              
      for $i in $doc/descendant-or-self::*
        return <element>
                 <element_path> {$i/string-join(ancestor-or-self::*/name(.), ''/'')} </element_path>
                 <element_content> {$i/text()}</element_content>
               </element>  
    '
    passing (select p_xml from params) as "doc"
    columns 
      element_path   varchar2(4000) path '//element_path',
      element_text   varchar2(4000) path '//element_content'
  )



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ALTER SESSION SET nls_date_format nie działa w APEX. Działa jednak w SQL Developer

  2. ORA-01427:podzapytanie jednowierszowe zwraca więcej niż jeden wiersz

  3. skonfigurować django z problemem bazy danych Oracle 11g

  4. Zmień tekst zapytania SQL Oracle przed przesłaniem

  5. Oracle:jak WSTAWIĆ, jeśli wiersz nie istnieje