powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как залить XML сложной структуры
31 сообщений из 31, показаны все 2 страниц
Как залить XML сложной структуры
    #39277444
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток. Прошу помощи : есть xml файл, размер ~30 М. Структура файла такова, пример записи
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<?xml version="1.0" encoding="UTF-8"?>
   
<Файл ИдФайл="F12124545_Z_0003" ВерсФорм="1.0" ТипИнф="ЗАПРОС" ВерсПрог="XXX" xsi:noNamespaceSchemaLocation="VO_8.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<Запрос Ид="ECB5" Дата="19.07.2016"/>
 <Персона Ид="7FBDE08730">
   <ПерсИнфо>
      <ФИОД Фамилия="Иванов" Имя="Иван" Отчество="Иванович" ДатаРожд="09.07.1900"></ФИОД>
      <Документ КодВидДок="21" Серия="40 00" Номер="000001"></Документ>
      <Адрес КодСубъекта="78" НеконфАдрес="город Санкт-Петербург, Фрунзенский район" КонфАдрес="Тупик Карла , дом 11, корп. 1, кв. 1" МестоРождения="г.Ленинград"></Адрес>
    </ПерсИнфо>
 <СлужИнфо ВРН="27060">
   <ИДИнфо Код="25" Фирма="2705" Система="2"></ИДИнфо>
   <Наименование Мероприятие="Выборы человека" Субъект="город Санкт-Петербург"></Наименование>
  </СлужИнфо>
 </Персона>
</Файл>



Как залить файл в таблицу Оракла в "разобранном" виде по колонкам "Ид", "Фамилия", "Имя"...."Код" ?
С простой структурой заливки данных, где данные лежат внутри тэгов, (<contact><name>N</name><address>KM Strasse 1</address></contact>) вопросов нет, а как работать со структурой из примера выше?
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277455
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XML||а как работать со структурой из примера выше?Точно также. Примеров полно на форуме. А ты даже не попробовал.
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277465
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElicXML||а как работать со структурой из примера выше?Точно также. Примеров полно на форуме. А ты даже не попробовал.
примеров полно с обычной структурой, где данные указаны между тэгами. Я не понимаю как разбирать структуру без парсера, где данные указаны в виде
Код: xml
1.
<ФИОД Фамилия="Иванов" Имя="Иван" Отчество="Иванович" ДатаРожд="09.07.1900"></ФИОД>
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277473
Фотография Владимир П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XML||,

с помощью XSLT преврати исходный XML в другой, с более удобной структурой. И уже полученный XML заливай в БД известными тебе способами.
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277476
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир П.XML||,

с помощью XSLT преврати исходный XML в другой, с более удобной структурой. И уже полученный XML заливай в БД известными тебе способами.

совершенно все запуталось .
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277481
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XML||где данные указаны в виде
Код: xml
1.
<ФИОД Фамилия="Иванов" Имя="Иван" Отчество="Иванович" ДатаРожд="09.07.1900"></ФИОД>

STFF xmltable атрибут
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277485
Владимир П.полученный XML заливай в БД известными тебе способами.И применяй этот гениальный трюк, из xml более простой xml, несколько раз, пока не поймешь ...
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277517
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На сервере в каталоге C:\1\ лежит файл с данными contact.xml

Пробую получить данные так
Код: plsql
1.
2.
3.
4.
 SELECT p.*
       FROM XMLTABLE ('Файл/Запрос/Персона/ПерсИнфо/ФИОД'
                      PASSING xmltype (BFILENAME ('C:\1\', 'contact.xml'), NLS_CHARSET_ID ('CP1251'))
                      COLUMNS F varchar2(50) PATH '@Фамилия') p



получаю ошибку ORA-22285: для операции FILEOPEN задан несуществующий каталог или файл
Есть нюансы в задании имени файла или каталога?
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277519
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не, явно какую -то фигню делаю, так я все секции не получу
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277586
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема понята. Сначала нужно залить в таблицу с колонкой xmltype данные из файла.

Код: plsql
1.
2.
3.
4.
INSERT INTO table_with_xml_column (filename, xml_document)
  VALUES ('contact.xml',
          XMLType(bfilename('XMLDIR', 'contact.xml'),                    
          nls_charset_id('AL32UTF8')));



если заливаю файл вида
<?xml version="1.0" encoding="UTF-8"?>
<start>
<contact><contact_name>11</contact_name><address>111113333 </address></contact>
<contact><contact_name>ууууу</contact_name><address>ууууу </address></contact>
</start>

То запрос выполняется без проблем.
При загрузке файла из изначального примера получаю ошибку
Код: sql
1.
2.
3.
4.
5.
SQL Error: ORA-64464: Ошибка события XML
ORA-19202: Возникла ошибка при обработке XML 
In line 3 of orastream:
LPX-00217: invalid character 54496 (U+D4E0)
64464. 00000 -  "XML event error"



В чем может быть проблема загрузки данных?
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277593
XML||,
в некорректном заполнении третьей строки xml
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277680
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
элементарно, ватсонXML||,
в некорректном заполнении третьей строки xml

а что не так ? Предварительно все создано CREATE DIRECTORY XMLDIR AS 'C:\1\';
Думаю что дело в не третьей строке, так как другой файл по структуре подгрузился.
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277688
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проблема была в кодировке
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277690
Фа в 1251
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot XML||]элементарно, ватсонДумаю что дело в не третьей строке, так как другой файл по структуре подгрузился.Что сущуствуют другтие файлы без ошибки в третьей строкн никто не сомневается.
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277763
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запрос такого плана
Код: plsql
1.
2.
3.
4.
5.
SELECT * FROM
      XMLTABLE ('/Персона/ПерсИнфо/ФИОД'
PASSING XMLTYPE ( BFILENAME ( 'XMLDIR', 'F.xml' ) , NLS_CHARSET_ID ( 'UTF8' ) )
columns F varchar2(50) path 'Фамилия'
)


Возвращает ноль строк. Почему?
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277767
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
@
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277770
иксымыль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
XML||Запрос такого плана
Код: plsql
1.
2.
3.
4.
5.
SELECT * FROM
      XMLTABLE ('/Персона/ПерсИнфо/ФИОД'
PASSING XMLTYPE ( BFILENAME ( 'XMLDIR', 'F.xml' ) , NLS_CHARSET_ID ( 'UTF8' ) )
columns F varchar2(50) path 'Фамилия'
)


Возвращает ноль строк. Почему?
Потому что
Код: plsql
1.
'/Запрос/Персона/ПерсИнфо/ФИОД'
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277778
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XML||Почему?Потому что ты не желаешь учиться. Методом тыка только дети рождаются.
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277782
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запрос возвращает данные
Код: plsql
1.
2.
3.
4.
5.
6.
SELECT * FROM
       XMLTABLE ('Файл/Персона/ПерсИнфо/ФИОД'
      PASSING XMLTYPE ( BFILENAME ( 'XMLDIR', 'F.xml' ) , NLS_CHARSET_ID ( 'UTF8' ) )
columns 
 F  varchar2(50) path '@Фамилия'
)


А как сюда же добавить данные из других блоков "СлужИнфо" и "Документ" ?
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277790
FLOWR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
XML||А как сюда же добавить данные из других блоков "СлужИнфо" и "Документ" ?
Зависит от того, что надо получить в итоге.
Причем сильно зависит.
Чти XML Developer Guide из штатного комплекта документации, там много примеров.
Другой вариант - если типа сам себе умный - загугли ключевые слова XML FLOWR и твори.
Творение размещай в первом параметре xmltable вместо xpath
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277821
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все, получилось разобрать файл целиком, правда, не за один проход.
Не понимаю как получить данные из тэгов <Запрос> в одном запросе с разбором <Файл/Персона>
двумя запросами получается, а одним - нет
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277826
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XML||Не понимаю как получить данные из тэгов <Запрос> в одном запросе с разбором <Файл/Персона>
Код: plsql
1.
'..'
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277849
XML||Запрос возвращает данные
Код: plsql
1.
2.
3.
4.
5.
6.
SELECT * FROM
       XMLTABLE ('Файл/Персона/ПерсИнфо/ФИОД'
      PASSING XMLTYPE ( BFILENAME ( 'XMLDIR', 'F.xml' ) , NLS_CHARSET_ID ( 'UTF8' ) )
columns 
 F  varchar2(50) path '@Фамилия'
)


А как сюда же добавить данные из других блоков "СлужИнфо" и "Документ" ?
....
Не понимаю как получить данные из тэгов <Запрос> в одном запросе с разбором <Файл/Персона>
двумя запросами получается, а одним - нет

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT * FROM
       XMLTABLE ('Файл'
      PASSING XMLTYPE ( BFILENAME ( 'XMLDIR', 'F.xml' ) , NLS_CHARSET_ID ( 'UTF8' ) )
columns 
 Z  varchar2(10) path '/Запрос@Ид'
...
 F  varchar2(50) path '/Персона/ПерсИнфо/ФИОД@Фамилия'
...
 D  varchar2(50) path '/Персона/ПерсИнфо/Документ@КодВидДок'
...
 SI varchar2(50) path '/СлужИнфо@ВРН'
...
)
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277852
даже я уже понял
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT * FROM
       XMLTABLE ('Файл'
      PASSING XMLTYPE ( BFILENAME ( 'XMLDIR', 'F.xml' ) , NLS_CHARSET_ID ( 'UTF8' ) )
columns 
 Z  varchar2(10) path '/Запрос@Ид',
...
 F  varchar2(50) path '/Персона/ПерсИнфо/ФИОД@Фамилия',
...
 D  varchar2(50) path '/Персона/ПерсИнфо/Документ@КодВидДок',
...
 SI varchar2(50) path '/СлужИнфо@ВРН',
...
)
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277870
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElicXML||Не понимаю как получить данные из тэгов <Запрос> в одном запросе с разбором <Файл/Персона>
Код: plsql
1.
'..'



Это опробовано, получаю
ORA-19110: неподдерживаемое выражение XQuery
19110. 00000 - "unsupported XQuery expression"
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277883
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XML||Это опробовано, получаю http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277893
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
with t as (
select '<?xml version="1.0" encoding="UTF-8"?>
   
<Файл ИдФайл="F12124545_Z_0003" ВерсФорм="1.0" ТипИнф="ЗАПРОС" ВерсПрог="XXX" xsi:noNamespaceSchemaLocation="VO_8.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<Запрос Ид="ECB5" Дата="19.07.2016"/>
<Персона Ид="7FBDE08730">
   <ПерсИнфо>
      <ФИОД Фамилия="Иванов" Имя="Иван" Отчество="Иванович" ДатаРожд="09.07.1900"></ФИОД>
      <Документ КодВидДок="21" Серия="40 00" Номер="000001"></Документ>
      <Адрес КодСубъекта="78" НеконфАдрес="город Санкт-Петербург, Фрунзенский район" КонфАдрес="Тупик Карла , дом 11, корп. 1, кв. 1" МестоРождения="г.Ленинград"></Адрес>
    </ПерсИнфо>
  <СлужИнфо ВРН="27060">
   <ИДИнфо Код="25" Фирма="2705" Система="2"></ИДИнфо>
   <Наименование Мероприятие="Выборы человека" Субъект="город Санкт-Петербург"></Наименование>
  </СлужИнфо>
</Персона>
</Файл>' xstr from dual
) 
select xt.* 
from t
   , xmltable('/Файл/Персона' 
     passing xmltype(t.xstr)
     columns PersID    varchar2(10)  path '@Ид'
           , FirstName varchar2(100) path './ПерсИнфо/ФИОД/@Имя' 
           , LastName  varchar2(100) path './ПерсИнфо/ФИОД/@Фамилия'
           , BirthDate varchar2(100) path 'ПерсИнфо/ФИОД/@ДатаРожд'
           , DocCode   path 'ПерсИнфо/Документ/@КодВидДок'
           , DocSerial path 'ПерсИнфо/Документ/@Серия'
           , DocNo     path 'ПерсИнфо/Документ/@Номер'
           , SrvInfBPH   path 'СлужИнфо/@ВРН'
           , SrvInfCode  path 'СлужИнфо/ИДИнфо/@Код'
           , SrvInfCompany path 'СлужИнфо/ИДИнфо/@Фирма'
           , SrvInfSrcSystm path 'СлужИнфо/ИДИнфо/@Система'
           , SrvInfEventName path 'СлужИнфо/Наименование/@Мероприятие'
           , SrvInfSubject path 'СлужИнфо/Наименование/@Субъект'
   ) xt
;
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277918
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как за один запрос получить данные из раздела <Файл ИдФайл> и <Запрос Ид> ?
Пробую таким образом :
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT * FROM
       XMLTABLE ('Файл/Персона'
      PASSING XMLTYPE ( BFILENAME ( 'XMLDIR', 'F.xml' ) , NLS_CHARSET_ID ( 'UTF8' ) )
columns 
 Id1  varchar2(50) path '../Запрос/@Ид',
Id  varchar2(50) path '@Ид',
 F  varchar2(70) path 'ПерсИнфо/ФИОД/@Фамилия',
......



Ошибка
ORA-19110: неподдерживаемое выражение XQuery
19110. 00000 - "unsupported XQuery expression"

проблема в Id1 varchar2(50) path '../Запрос/@Ид',
т.е. нужно подняться на уровень , как это сделать?
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277953
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XML||т.е. нужно подняться на уровень , как это сделать?Подниматься нужно откуда-то.
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39284110
NewOracle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
with t as (
select '<?xml version="1.0" encoding="UTF-8"?>
   
<Файл ИдФайл="F12124545_Z_0003" ВерсФорм="1.0" ТипИнф="ЗАПРОС" ВерсПрог="XXX" xsi:noNamespaceSchemaLocation="VO_8.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<Запрос Ид="ECB5" Дата="19.07.2016"/>
<Персона Ид="7FBDE08730">
   <ПерсИнфо>
      <ФИОД Фамилия="Иванов" Имя="Иван" Отчество="Иванович" ДатаРожд="09.07.1900"></ФИОД>
      <Документ КодВидДок="21" Серия="40 00" Номер="000001"></Документ>
      <Адрес КодСубъекта="78" НеконфАдрес="город Санкт-Петербург, Фрунзенский район" КонфАдрес="Тупик Карла , дом 11, корп. 1, кв. 1" МестоРождения="г.Ленинград"></Адрес>
    </ПерсИнфо>
  <СлужИнфо ВРН="27060">
   <ИДИнфо Код="25" Фирма="2705" Система="2"></ИДИнфо>
   <Наименование Мероприятие="Выборы человека" Субъект="город Санкт-Петербург"></Наименование>
  </СлужИнфо>
</Персона>
</Файл>' xstr from dual
)
SELECT 
Z.EXTRACT(('Файл/@ТипИнф')).GETSTRINGVAL() AS "ТипИнф"
,Z.EXTRACT(('Файл/Запрос/@Ид')).GETSTRINGVAL()  AS "Ид"
,Z.EXTRACT(('Файл/Персона/ПерсИнфо/ФИОД/@Фамилия')).GETSTRINGVAL()  AS "Фамилия"
,Z.EXTRACT(('Файл/Персона/ПерсИнфо/Документ/@КодВидДок')).GETSTRINGVAL()  AS "КодВидДок"
,Z.EXTRACT(('Файл/Персона/ПерсИнфо/Адрес/@НеконфАдрес')).GETSTRINGVAL()  AS "НеконфАдрес"
,Z.EXTRACT(('Файл/Персона/СлужИнфо/@ВРН')).GETSTRINGVAL()  AS "ВРН"
FROM t 
CROSS JOIN 
TABLE(XMLSEQUENCE(XMLTYPE(T.XSTR).EXTRACT('Файл'))) Z
;
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39284201
Фотография Rinka777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pentaho
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как залить XML сложной структуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]