Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 о разборе xml...  [new]
LeapForward
Member

Откуда:
Сообщений: 12
Добрый день.
Имеется xml следующего вида:
<root>
<expert>
<n_expert>12345</n_expert>
<sertif><n_sert>1234</n_sert><n_sert>2345</n_sert></sertif>
</expert>
</root>


При разборе его в таблицу следующим кодом:
SELECT *
      FROM XMLTABLE
        ( '/root/expert'
          passing xmltype (expdata)
            columns N_EXPERT NUMBER PATH 'N_EXPERT',
            n_sert NUMBER PATH 'sertif/n_sert')


возникает ошибка XQuery dynamic type mismatch: expected singleton sequence - got multi-item sequence.
Можно ли сделать так чтобы такой xml разобрался таким образом:
n_expert n_sert
12345 1234
12345 2345

Либо разобрать его в две таблицы, что бы в одной таблице хранились записи n_sert и в ней были ключи на вторую таблицу с записями n_expert?
Заранее спасибо.
29 июн 12, 08:32    [12792156]     Ответить | Цитировать Сообщить модератору
 Re: о разборе xml...  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
LeapForward,

+
with t as (
  select 
  '
   <root>
      <expert>
         <n_expert>12345</n_expert>
         <sertif><n_sert>1234</n_sert><n_sert>2345</n_sert></sertif>
      </expert>
   </root>
  ' as expdata
  from dual
)
SELECT 
  t2.*
FROM 
t,
XMLTABLE
  ( 'for $e in /root/expert 
       for $s in $e/sertif/n_sert
          return <n_sert n_expert="{$e/n_expert}">{$s}</n_sert>'
    passing xmltype (expdata)
      columns 
      N_EXPERT NUMBER PATH '@n_expert',
      n_sert NUMBER PATH 'n_sert'
  ) t2
29 июн 12, 09:18    [12792421]     Ответить | Цитировать Сообщить модератору
 Re: о разборе xml...  [new]
LeapForward
Member

Откуда:
Сообщений: 12
xtender

Огромное спасибо!
29 июн 12, 09:36    [12792538]     Ответить | Цитировать Сообщить модератору
 Re: о разборе xml...  [new]
перебор
Guest
select n_expert, n_sert
  from t
  , xmltable
    ( '/root/expert' passing xmltype(expdata) columns 
      n_expert number path 'n_expert',
      sertif xmltype path 'sertif'
    ) t2
  , xmltable
    ( '/sertif/n_sert' passing t2.sertif columns 
      n_sert number path '/n_sert'
    )(+) t3 
;
29 июн 12, 10:08    [12792698]     Ответить | Цитировать Сообщить модератору
 Re: о разборе xml...  [new]
точно перебор
Guest
перебор
      n_sert number path '/'
29 июн 12, 10:10    [12792716]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить