Как вы получаете PL / SQL для анализа атрибутов XML вместо элементов XML в Oracle? - PullRequest
2 голосов
/ 08 февраля 2010

Пожалуйста, смотрите фрагменты PL / SQL ниже:

create table t23 (
    field01 number, 
    field02 number, 
    field03 char(1) 
);

Пример фрагмента # 1

declare x varchar2(2000) := '
<ArrayOfRecords>
<Record>
<Field01>130</Field01> 
<Field02>1700</Field02> 
<Field03>C</Field03> 
</Record> 
<Record>
<Field01>131</Field01> 
<Field02>1701</Field02> 
<Field03>B</Field03> 
</Record>                         
</ArrayOfRecords>';

begin
    insert
    into    T23
    SELECT  *
    FROM    XMLTABLE('/ArrayOfRecords/Record'
                PASSING xmltype(x)
                    COLUMNS 
                    Field01 number PATH 'Field01',
                    Field02 number PATH 'Field02',
                    Field03 char(1) PATH 'Field03'
            );
end;

-- The records will be here - great!
select  * from T23;

Пример фрагмента # 2

declare y varchar2(2000) := '
<ArrayOfRecords>
<Record Field01="130" Field02="1700" Field03="C" />
<Record Field01="131" Field02="1701" Field03="B" />
</ArrayOfRecords>';

begin
    insert
    into    T23
    SELECT  *
    FROM    XMLTABLE('/ArrayOfRecords/Record'
                PASSING xmltype(y)
                    COLUMNS 
                    Field01 number PATH 'Field01',
                    Field02 number PATH 'Field02',
                    Field03 char(1) PATH 'Field03'
            );
end;

-- null values are inserted into the table - not great
select  * from T23;

Как вы получаете значения из атрибутов XML в примере фрагмента № 2? Есть ли способ сообщить xmltype, что нужно извлекать данные из атрибутов и элементов?

1 Ответ

5 голосов
/ 08 февраля 2010

Использовать синтаксис @ для атрибутов

select *
  from xmltable('/ArrayOfRecords/Record'
         passing xmltype(y)
         columns
         field01 number path '@Field01',
         field02 number path '@Field02',
         field03 char(1) path '@Field03'
       );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...