2014-01-24 2 views
0

У меня есть таблица «TEST» со столбцом CLOB «XML» (DB Oracle 11), где сохраняется содержимое xml.XMLTYPE Извлечение нескольких путей/индексация

В этих колонках, которые вы найдете, например, строки с таким содержанием

1 Их

<xml> 
    <identification>Test1</identification> 
<xml> 

2 Ими

<xml> 
    <identificationNumber>Test2</identificationNumber> 
<xml> 

Нормальный экстракт выглядит следующим образом:

Select 
    XMLTYPE("TEST"."XML").EXTRACT('//identification/text()').getStringVal() 
    From "XML" 

1. Вопрос

Как я могу извлечь из двух путей? Поскольку оба названия одинаковы и являются, например, просто ошибкой в ​​xml.

2. Вопрос

Имея много выписок в одном выбора, для выполнения это может быть лучше индексировать, или?

Как я могу индексировать Экстракт, как указано выше?

ответ

1

Вопрос 1

Если узлы находятся в том же месте в иерархии, вы можете использовать что-то вроде этого:

SQL> create table test (xml clob) 
    2/

Table created. 

SQL> insert into test 
    2 select '<xml> 
    3  <identification>Test1</identification> 
    4 </xml>' from dual union all 
    5 select '<xml> 
    6  <identificationNumber>Test2</identificationNumber> 
    7 </xml>' from dual 
    8/

2 rows created. 

SQL> select XMLTYPE("TEST"."XML").EXTRACT('/xml//text()').getStringVal() 
    2 from test 
    3/

XMLTYPE("TEST"."XML").EXTRACT('/XML//TEXT()').GETSTRINGVAL() 
----------------------------------------------------------------------------------- 
Test1 
Test2 

2 rows selected. 

Вопрос 2

В этом примере, индекс, вероятно, не принесет вам никакой пользы. Но в целом, вот некоторые ссылки о индексах XML:

Смежные вопросы