Основная проблема заключается в том, как вы создаете XML. У вас есть внешний XMLElement для OneAirport
, и содержимое этого элемента представляет собой одну строку.
Вы генерируете отдельные элементы XMLE из полей курсора, но затем объединяете их вместе, что дает вам одну строку, в которой все еще есть ожидаемые угловые скобки. Итак, вы пытаетесь сделать что-то вроде, немного упростил:
select
xmlelement("OneAirport", '<Rank>1</Rank><airport>Hartsfield-Jackson</airport>')
from dual;
XMLELEMENT("ONEAIRPORT",'<RANK>1</RANK><AIRPORT>HARTSFIELD-JACKSON</AIRPORT>')
--------------------------------------------------------------------------------
<OneAirport><Rank>1</Rank><airport>Hartsfield-Jackson</airp
и по умолчанию XMLElement () экранирует сущности в переданных значениях, поэтому угловые скобки преобразуются в «безопасные» эквиваленты, такие как <
. Если он этого не сделал или вы сказали это не с noentityescaping
:
select xmlelement(noentityescaping "OneAirport", '<Rank>1</Rank><airport>Hartsfield-Jackson</airport>')
from dual;
XMLELEMENT(NOENTITYESCAPING"ONEAIRPORT",'<RANK>1</RANK><AIRPORT>HARTSFIELD-JACKS
--------------------------------------------------------------------------------
<OneAirport><Rank>1</Rank><airport>Hartsfield-Jackson</airport></OneAirport>
тогда это может показаться лучше, но у вас все еще есть один элемент с одной строкой (с символами, которые могут вызвать проблемы в дальнейшем), а не структура XML, которую вы почти наверняка намеревались.
Простой способ получить структуру zctual - это XMLForest () :
xmlelement("OneAirport",
xmlforest(i.Rank, i.airport, i.Location, i.Country, i.code_iata,
i.code_icao, i.Total_Passenger, i.Rank_change, i.Percent_change)
)
Вам не нужен цикл курсора или какой-либо PL / SQL; Вы можете просто сделать:
insert into airports_2_xml (airport)
select xmlelement("OneAirport",
xmlforest(i.Rank, i.airport, i.Location, i.Country, i.code_iata,
i.code_icao, i.Total_Passenger, i.Rank_change, i.Percent_change)
)
from airports_1_orcl i;
Вторая проблема - это дисплей. Вы увидите больше данных, если выполните некоторые команды форматирования, такие как:
set lines 120
set long 32767
set longchunk 32767
Они сообщат вашему клиенту, что нужно извлечь и показать больше длинных (здесь XMLType) данных, а не 80 символов по умолчанию, которые он вам дает сейчас.
После создания вложенной структуры XML вы можете использовать XMLSerialize () , чтобы отобразить ее более читабельно при запросе второй таблицы.