powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разбор XML с указанием значения узла в путях
14 сообщений из 14, страница 1 из 1
Разбор XML с указанием значения узла в путях
    #40052996
новый2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. Разбираю XML, который состоит из нескольких узлов, а вставка в одну таблицу осуществляется . Для связи узлов я использую данные из тегов. Но у меня проблема - если количество узлов полностью совпадает, то правильно работает. А если в одном узле больше данных, вместо данных другой части должны быть пустые поля, но у меня вообще эти строки не выводятся


Код: 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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
with tx as (select xmltype('<?xml version="1.0" encoding="UTF-8"?>
<ED_Container>
  <Object>
   <ROW1>
    <GoodsCost>
      <SheetNumber>1</SheetNumber>
      <GoodsNumber>1</GoodsNumber>
      <MethodNumberCode>1</MethodNumberCode>
    </GoodsCost>
    <GoodsCost>
      <SheetNumber>2</SheetNumber>
      <GoodsNumber>2</GoodsNumber>
      <MethodNumberCode>2</MethodNumberCode>
    </GoodsCost>
    <GoodsCost>
      <SheetNumber>3</SheetNumber>
      <GoodsNumber>3</GoodsNumber>
      <MethodNumberCode>2</MethodNumberCode>
    </GoodsCost>
  </ROW1>
 </Object>
   <Object>
   <ROW1>
    <GoodsCost>
      <SheetNumber>5</SheetNumber>
      <GoodsNumber>1</GoodsNumber>
      <MethodNumberCode>5</MethodNumberCode>
    </GoodsCost>
    <GoodsCost>
      <SheetNumber>6</SheetNumber>
      <GoodsNumber>2</GoodsNumber>
      <MethodNumberCode>6</MethodNumberCode>
    </GoodsCost>
    <GoodsCost>
      <SheetNumber>7</SheetNumber>
      <GoodsNumber>3</GoodsNumber>
      <MethodNumberCode>7</MethodNumberCode>
    </GoodsCost>
  </ROW1>
 </Object>
 <Object>
  <ROW2>	
   <NUM_PP>1</NUM_PP>
   <Comments>a</Comments>	
   <GoodsMark>
     <GoodsNumber>1</GoodsNumber>
     <Decision>
  	<DecisionCode>a1</DecisionCode>  	
  	<DateInf>2021-02-20</DateInf>
  	<DecisionDescription>Description1</DecisionDescription>
     </Decision>
   </GoodsMark>
   <GoodsMark>
    <GoodsNumber>2</GoodsNumber>
    <Decision>
  	<DecisionCode>a2</DecisionCode>  	
  	<DateInf>2021-02-22</DateInf>
  	<DecisionDescription>Description2</DecisionDescription>
    </Decision>
   </GoodsMark>
  </ROW2>
 </Object>
</ED_Container>') xml_file from dual)
select NUM_PP,SHEET_N,GOOD_N,  NMET,  DC,DC_DATE, DC_DESC
           from  tx,xmltable ('/ED_Container/Object/ROW1'
    PASSING xml_file COLUMNS 	
         NUM_PP	FOR ORDINALITY ,
           tab_xml_ XMLTYPE PATH 'GoodsCost') ,
      xmltable ('GoodsCost'  
      PASSING tab_xml_  COLUMNS 
           SHEET_N              NUMBER(5)	PATH  'SheetNumber',
           GOOD_N	NUMBER(5)	PATH  'GoodsNumber',
           NMET	VARCHAR2(2)	PATH  'MethodNumberCode') ,
      xmltable('/ED_Container/Object/ROW2[NUM_PP=$p1]/GoodsMark[GoodsNumber=$p2]'   
   PASSING xml_file, NUM_PP as "p1",GOOD_N as "p2"   COLUMNS 
      DC	VARCHAR2(2)	PATH  'Decision/DecisionCode',
      DC_DATE	DATE	PATH  'Decision/DateInf',
      DC_DESC	VARCHAR2(50)	PATH  'Decision/DecisionDescription');



Получаю
Код: sql
1.
2.
3.
NUM_PP	SHEET_N	GOOD_N	NMET	DC	DC_DATE	DC_DESC
1	1	1	1	a1	2021-02-20	Description1
1	2	2	2	a2	2021-02-22	Description2



Ожидаю результат
Код: sql
1.
2.
3.
4.
5.
6.
7.
NUM_PP	SHEET_N	GOOD_N	NMET	DC	DC_DATE	DC_DESC
1	1	1	1	a1	2021-02-20	Description1
1	2	2	2	a2	2021-02-22	Description2
1	3	3	2	(null)	(null)	(null)
2	5	1	5	(null)	(null)	(null)
2	6	2	6	(null)	(null)	(null)
2	7	3	7	(null)	(null)	(null)
...
Рейтинг: 0 / 0
Разбор XML с указанием значения узла в путях
    #40053118
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
новый2,

попробуйте
...)(+)

.....
stax
...
Рейтинг: 0 / 0
Разбор XML с указанием значения узла в путях
    #40053145
новый2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,
Спасибо, получилось
...
Рейтинг: 0 / 0
Разбор XML с указанием значения узла в путях
    #40053159
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
новый2

Спасибо, получилось


Интересно какой воспаленный мозг придумал этот бредовый XSD.

SY.
...
Рейтинг: 0 / 0
Разбор XML с указанием значения узла в путях
    #40053169
новый2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,
что имеем, увы, жутко напрягает , но приходиться разбирать
и это упрощенный кусок, из ROW2 в другие таблицы еще вставка есть
...
Рейтинг: 0 / 0
Разбор XML с указанием значения узла в путях
    #40053524
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
новый2
в другие таблицы еще вставка есть

https://oracle-base.com/articles/9i/multitable-inserts
...
Рейтинг: 0 / 0
Разбор XML с указанием значения узла в путях
    #40053661
новый2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous, Multitable Inserts знаю, но XML сложной структуры, не удобно его использовать
...
Рейтинг: 0 / 0
Разбор XML с указанием значения узла в путях
    #40054135
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
новый2
andrey_anonymous, Multitable Inserts знаю, но XML сложной структуры, не удобно его использовать

Ммм?
Это перпендикулярные вещи.
...
Рейтинг: 0 / 0
Разбор XML с указанием значения узла в путях
    #40054176
новый2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,
чем поможет Multitable Inserts при XML структуре: ( и то не вся)

Код: 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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
<?xml version="1.0" encoding="UTF-8"?>
<ED_Container>
  <Object>
   <ROW1>
    <Line1>Line1</Line1>
    <Line2>Line2</Line2>
    <Line3>Line3</Line3>
    <GoodsCost>
      <SheetNumber>1</SheetNumber>
      <GoodsNumber>1</GoodsNumber>
      <MethodNumberCode>1</MethodNumberCode>
      <Group1>
        <Line_g1>Lineg11</Line_g1>
      </Group1>
      <Group1>
        <Line_g1>Line_line</Line_g1>
      </Group1>
    </GoodsCost>
    <GoodsCost>
      <SheetNumber>2</SheetNumber>
      <GoodsNumber>2</GoodsNumber>
      <MethodNumberCode>2</MethodNumberCode>
      <Group1>
        <Line_g1>Lineg1</Line_g1>
        <Line_g12>Lineg12</Line_g12>
      </Group1>
      <Group2>
        <Line_g2>Lineg2</Line_g2>
      </Group2>
    </GoodsCost>
    <GoodsCost>
      <SheetNumber>3</SheetNumber>
      <GoodsNumber>3</GoodsNumber>
      <MethodNumberCode>2</MethodNumberCode>
    </GoodsCost>    
  </ROW1>
 </Object>
   <Object>
   <ROW1>
   <Line1>Line1</Line1>
    <GoodsCost>
      <SheetNumber>5</SheetNumber>
      <GoodsNumber>1</GoodsNumber>
      <MethodNumberCode>5</MethodNumberCode>
       <Group2>
        <Line_g2>Lineg22</Line_g2>
      </Group2>
    </GoodsCost>
    <GoodsCost>
      <SheetNumber>6</SheetNumber>
      <GoodsNumber>2</GoodsNumber>
      <MethodNumberCode>6</MethodNumberCode>
    </GoodsCost>
    <GoodsCost>
      <SheetNumber>7</SheetNumber>
      <GoodsNumber>3</GoodsNumber>
      <MethodNumberCode>7</MethodNumberCode>
    </GoodsCost>
  </ROW1>
 </Object>
 <Object>
  <ROW2>	
   <NUM_PP>1</NUM_PP>
   <Comments>a1</Comments>
   <Group_r1>	
    <Line_r1>Liner1</Line_r1>
   </Group_r1>	
   <GoodsMark>
     <GoodsNumber>1</GoodsNumber>
     <Decision>
  	<DecisionCode>a1</DecisionCode>  	
  	<DateInf>2021-02-20</DateInf>
  	<DecisionDescription>Description1</DecisionDescription>
     </Decision>
   </GoodsMark>
   <GoodsMark>
    <GoodsNumber>2</GoodsNumber>
    <Decision>
  	<DecisionCode>a2</DecisionCode>  	
  	<DateInf>2021-02-22</DateInf>
  	<DecisionDescription>Description2</DecisionDescription>
    </Decision>
   </GoodsMark>
  </ROW2>
 </Object>
</ED_Container>



И вставки

Код: 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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
 insert into t1 select a.*,b.prim
           from  tx,xmltable ('/ED_Container/Object/ROW1'
    PASSING xml_file COLUMNS 	
         NUM_PP	FOR ORDINALITY ,
         Line1 VARCHAR2(10) PATH 'Line1',
         Line2 VARCHAR2(10) PATH 'Line2',
         Line3 VARCHAR2(10) PATH 'Line3') a,
         xmltable('/ED_Container/Object/ROW2'   
   PASSING xml_file COLUMNS 
      NUM_PP_2	number PATH  'NUM_PP' ,
      prim	VARCHAR2(10)	PATH  'Comments') where NUM_PP=NUM_PP_2(+) ;
         
 insert into t2 
 select NUM_PP,SHEET_N,GOOD_N,  NMET,  DC,DC_DATE, DC_DESC
           from  tx,xmltable ('/ED_Container/Object/ROW1'
    PASSING xml_file COLUMNS 	
         NUM_PP	FOR ORDINALITY ,
           tab_xml_ XMLTYPE PATH 'GoodsCost') ,
      xmltable ('GoodsCost'  
      PASSING tab_xml_  COLUMNS 
           SHEET_N              NUMBER(5)	PATH  'SheetNumber',
           GOOD_N	NUMBER(5)	PATH  'GoodsNumber',
           NMET	VARCHAR2(2)	PATH  'MethodNumberCode') ,
      xmltable('/ED_Container/Object/ROW2[NUM_PP=$p1]/GoodsMark[GoodsNumber=$p2]'   
   PASSING xml_file, NUM_PP as "p1",GOOD_N as "p2"   COLUMNS 
      DC	VARCHAR2(2)	PATH  'Decision/DecisionCode',
      DC_DATE	DATE	PATH  'Decision/DateInf',
      DC_DESC	VARCHAR2(50)	PATH  'Decision/DecisionDescription')(+);
      
 insert into t3 
 select a.*            from  tx,     xmltable('/ED_Container/Object/ROW2'   
   PASSING xml_file COLUMNS 
      NUM_PP	number PATH  'NUM_PP' ,
      Line_r1	VARCHAR2(10)	PATH  'Group_r1/Line_r1') a;    
      
 insert into t4 
  select NUM_PP,SHEET_N ,GOOD_N,b.* from   tx,xmltable ('/ED_Container/Object/ROW1'
    PASSING xml_file COLUMNS 	
         NUM_PP	FOR ORDINALITY ,
           tab_xml_ XMLTYPE PATH 'GoodsCost') ,
      xmltable ('GoodsCost'  
      PASSING tab_xml_  COLUMNS 
           SHEET_N              NUMBER(5)	PATH  'SheetNumber',
           GOOD_N	NUMBER(5)	PATH  'GoodsNumber',
           tab_xml_2 XMLTYPE PATH 'Group1')  ,
     xmltable ('Group1'  
      PASSING tab_xml_2  COLUMNS 
           Line_g1   VARCHAR2(10) PATH  'Line_g1',
           Line_g12  VARCHAR2(10) PATH  'Line_g12')  b;        
           
 insert into t5 
  select NUM_PP,SHEET_N ,GOOD_N,b.* from   tx,xmltable ('/ED_Container/Object/ROW1'
    PASSING xml_file COLUMNS 	
         NUM_PP	FOR ORDINALITY ,
           tab_xml_ XMLTYPE PATH 'GoodsCost') ,
      xmltable ('GoodsCost'  
      PASSING tab_xml_  COLUMNS 
           SHEET_N              NUMBER(5)	PATH  'SheetNumber',
           GOOD_N	NUMBER(5)	PATH  'GoodsNumber',
           tab_xml_2 XMLTYPE PATH 'Group2')  ,
     xmltable ('Group2'  
      PASSING tab_xml_2  COLUMNS 
           Line_g2   VARCHAR2(10) PATH  'Line_g2',
           Line_g22  VARCHAR2(10) PATH  'Line_g22')  b;



и еще несколько десятков таблиц
...
Рейтинг: 0 / 0
Разбор XML с указанием значения узла в путях
    #40054203
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если есть возможность делать парсинг за один проход по источнику - то вполне.
1. Пишете общий select с парсингом необходимых вариантов
2. Cверху приписываете insert {all|first}

Преимущества:
- экономия на многократных проходах по источнику
- общая согласованность данных

Недостатки:
- требуется ввести очень жесткий стандарт оформления кода для обеспечения вменяемой поддержки
- надо тщательно продумать реализацию, чтобы не плодить экстремально широкий набор атрибутов - либо унификацией полей, либо, как вариант, ваять на подтипах.
...
Рейтинг: 0 / 0
Разбор XML с указанием значения узла в путях
    #40054213
новый2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,
Будет ли по времени ускорение?
больше временной вопрос интересует, источник - это переменная, согласованность я обеспечиваю и при таком подходе.
Разбор провис при поступлении XML с 190 тыс записей в одной из веток. разбор и вставка именно этой ветки в соответствующую в таблицу шла более получаса
...
Рейтинг: 0 / 0
Разбор XML с указанием значения узла в путях
    #40054300
qlost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прости, друг, может, я плохо понял тему, т.к. не стал вчитываться, но зацепился взгляд за
новый2

Разбор провис при поступлении XML с 190 тыс записей в одной из веток. разбор и вставка именно этой ветки в соответствующую в таблицу шла более получаса

Сталкивался с подобными проблемами. Решал их с помощью SAX. Первый случай по молодости - на C. Позже - через Java function внутри БД (Oracle нативно не поддерживает SAX).
...
Рейтинг: 0 / 0
Разбор XML с указанием значения узла в путях
    #40096068
новый2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Почему-то спустя полгода перестало работать((
Код: 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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
SQL>  select banner from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
PL/SQL Release 12.2.0.1.0 - Production
CORE    12.2.0.1.0      Production
TNS for Linux: Version 12.2.0.1.0 - Production
NLSRTL Version 12.2.0.1.0 - Production

Elapsed: 00:00:00.05
SQL> with tx as (select xmltype('<?xml version="1.0" encoding="UTF-8"?>
  2  <ED_Container>
  3    <Object>
  4     <ROW1>
  5      <GoodsCost>
  6        <SheetNumber>1</SheetNumber>
  7        <GoodsNumber>1</GoodsNumber>
  8        <MethodNumberCode>1</MethodNumberCode>
  9      </GoodsCost>
 10      <GoodsCost>
 11        <SheetNumber>2</SheetNumber>
 12        <GoodsNumber>2</GoodsNumber>
 13        <MethodNumberCode>2</MethodNumberCode>
 14      </GoodsCost>
 15      <GoodsCost>
 16        <SheetNumber>3</SheetNumber>
 17        <GoodsNumber>3</GoodsNumber>
 18        <MethodNumberCode>2</MethodNumberCode>
 19      </GoodsCost>
 20    </ROW1>
 21   </Object>
 22     <Object>
 23     <ROW1>
 24      <GoodsCost>
 25        <SheetNumber>5</SheetNumber>
 26        <GoodsNumber>1</GoodsNumber>
 27        <MethodNumberCode>5</MethodNumberCode>
 28      </GoodsCost>
 29      <GoodsCost>
 30        <SheetNumber>6</SheetNumber>
 31        <GoodsNumber>2</GoodsNumber>
 32        <MethodNumberCode>6</MethodNumberCode>
 33      </GoodsCost>
 34      <GoodsCost>
 35        <SheetNumber>7</SheetNumber>
 36        <GoodsNumber>3</GoodsNumber>
 37        <MethodNumberCode>7</MethodNumberCode>
 38      </GoodsCost>
 39    </ROW1>
 40   </Object>
 41   <Object>
 42    <ROW2> 
 43     <NUM_PP>1</NUM_PP>
 44     <Comments>a</Comments> 
 45     <GoodsMark>
 46       <GoodsNumber>1</GoodsNumber>
 47       <Decision>
 48     <DecisionCode>a1</DecisionCode>   
 49     <DateInf>2021-02-20</DateInf>
 50     <DecisionDescription>Description1</DecisionDescription>
 51       </Decision>
 52     </GoodsMark>
 53     <GoodsMark>
 54      <GoodsNumber>2</GoodsNumber>
 55      <Decision>
 56     <DecisionCode>a2</DecisionCode>   
 57     <DateInf>2021-02-22</DateInf>
 58     <DecisionDescription>Description2</DecisionDescription>
 59      </Decision>
 60     </GoodsMark>
 61    </ROW2>
 62   </Object>
 63  </ED_Container>') xml_file from dual)
 64  select NUM_PP,SHEET_N,GOOD_N,  NMET,  DC,DC_DATE, DC_DESC
 65             from  tx,xmltable ('/ED_Container/Object/ROW1'
 66      PASSING xml_file COLUMNS  
 67           NUM_PP FOR ORDINALITY ,
 68             tab_xml_ XMLTYPE PATH 'GoodsCost') ,
 69        xmltable ('GoodsCost'  
 70        PASSING tab_xml_  COLUMNS 
 71             SHEET_N              NUMBER(5) PATH  'SheetNumber',
 72             GOOD_N NUMBER(5) PATH  'GoodsNumber',
 73             NMET VARCHAR2(2) PATH  'MethodNumberCode') ,
 74        xmltable('/ED_Container/Object/ROW2[NUM_PP=$p1]/GoodsMark[GoodsNumber=$p2]'   
 75     PASSING xml_file, NUM_PP as "p1",GOOD_N as "p2"   COLUMNS 
 76        DC VARCHAR2(2) PATH  'Decision/DecisionCode',
 77        DC_DATE DATE PATH  'Decision/DateInf',
 78        DC_DESC VARCHAR2(50) PATH  'Decision/DecisionDescription');

no rows selected

Elapsed: 00:00:00.32
SQL> with tx as (select xmltype('<?xml version="1.0" encoding="UTF-8"?>
  2  <ED_Container>
  3    <Object>
  4     <ROW1>
  5      <GoodsCost>
  6        <SheetNumber>1</SheetNumber>
  7        <GoodsNumber>1</GoodsNumber>
  8        <MethodNumberCode>1</MethodNumberCode>
  9      </GoodsCost>
 10      <GoodsCost>
 11        <SheetNumber>2</SheetNumber>
 12        <GoodsNumber>2</GoodsNumber>
 13        <MethodNumberCode>2</MethodNumberCode>
 14      </GoodsCost>
 15      <GoodsCost>
 16        <SheetNumber>3</SheetNumber>
 17        <GoodsNumber>3</GoodsNumber>
 18        <MethodNumberCode>2</MethodNumberCode>
 19      </GoodsCost>
 20    </ROW1>
 21   </Object>
 22     <Object>
 23     <ROW1>
 24      <GoodsCost>
 25        <SheetNumber>5</SheetNumber>
 26        <GoodsNumber>1</GoodsNumber>
 27        <MethodNumberCode>5</MethodNumberCode>
 28      </GoodsCost>
 29      <GoodsCost>
 30        <SheetNumber>6</SheetNumber>
 31        <GoodsNumber>2</GoodsNumber>
 32        <MethodNumberCode>6</MethodNumberCode>
 33      </GoodsCost>
 34      <GoodsCost>
 35        <SheetNumber>7</SheetNumber>
 36        <GoodsNumber>3</GoodsNumber>
 37        <MethodNumberCode>7</MethodNumberCode>
 38      </GoodsCost>
 39    </ROW1>
 40   </Object>
 41   <Object>
 42    <ROW2> 
 43     <NUM_PP>1</NUM_PP>
 44     <Comments>a</Comments> 
 45     <GoodsMark>
 46       <GoodsNumber>1</GoodsNumber>
 47       <Decision>
 48     <DecisionCode>a1</DecisionCode>   
 49     <DateInf>2021-02-20</DateInf>
 50     <DecisionDescription>Description1</DecisionDescription>
 51       </Decision>
 52     </GoodsMark>
 53     <GoodsMark>
 54      <GoodsNumber>2</GoodsNumber>
 55      <Decision>
 56     <DecisionCode>a2</DecisionCode>   
 57     <DateInf>2021-02-22</DateInf>
 58     <DecisionDescription>Description2</DecisionDescription>
 59      </Decision>
 60     </GoodsMark>
 61    </ROW2>
 62   </Object>
 63  </ED_Container>') xml_file from dual)
 64  select NUM_PP,SHEET_N,GOOD_N,  NMET,  DC,DC_DATE, DC_DESC
 65             from  tx,xmltable ('/ED_Container/Object/ROW1'
 66      PASSING xml_file COLUMNS  
 67           NUM_PP FOR ORDINALITY ,
 68             tab_xml_ XMLTYPE PATH 'GoodsCost') ,
 69        xmltable ('GoodsCost'  
 70        PASSING tab_xml_  COLUMNS 
 71             SHEET_N              NUMBER(5) PATH  'SheetNumber',
 72             GOOD_N NUMBER(5) PATH  'GoodsNumber',
 73             NMET VARCHAR2(2) PATH  'MethodNumberCode') ,
 74        xmltable('/ED_Container/Object/ROW2[NUM_PP=$p1]/GoodsMark[GoodsNumber=$p2]'   
 75     PASSING xml_file, NUM_PP as "p1",GOOD_N as "p2"   COLUMNS 
 76        DC VARCHAR2(2) PATH  'Decision/DecisionCode',
 77        DC_DATE DATE PATH  'Decision/DateInf',
 78        DC_DESC VARCHAR2(50) PATH  'Decision/DecisionDescription')(+)
 79  ;

    NUM_PP    SHEET_N     GOOD_N NM DC DC_DATE   DC_DESC
---------- ---------- ---------- -- -- --------- --------------------------------------------------
         1          1          1 1
         1          2          2 2
         1          3          3 2
         2          5          1 5
         2          6          2 6
         2          7          3 7

6 rows selected.
...
Рейтинг: 0 / 0
Разбор XML с указанием значения узла в путях
    #40096085
новый2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так работает
Код: 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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
SQL> with tx as (select xmltype('<?xml version="1.0" encoding="UTF-8"?>
  2  <ED_Container>
  3    <Object>
  4     <ROW1>
  5      <GoodsCost>
  6        <SheetNumber>1</SheetNumber>
  7        <GoodsNumber>1</GoodsNumber>
  8        <MethodNumberCode>1</MethodNumberCode>
  9      </GoodsCost>
 10      <GoodsCost>
 11        <SheetNumber>2</SheetNumber>
 12        <GoodsNumber>2</GoodsNumber>
 13        <MethodNumberCode>2</MethodNumberCode>
 14      </GoodsCost>
 15      <GoodsCost>
 16        <SheetNumber>3</SheetNumber>
 17        <GoodsNumber>3</GoodsNumber>
 18        <MethodNumberCode>2</MethodNumberCode>
 19      </GoodsCost>
 20    </ROW1>
 21   </Object>
 22     <Object>
 23     <ROW1>
 24      <GoodsCost>
 25        <SheetNumber>5</SheetNumber>
 26        <GoodsNumber>1</GoodsNumber>
 27        <MethodNumberCode>5</MethodNumberCode>
 28      </GoodsCost>
 29      <GoodsCost>
 30        <SheetNumber>6</SheetNumber>
 31        <GoodsNumber>2</GoodsNumber>
 32        <MethodNumberCode>6</MethodNumberCode>
 33      </GoodsCost>
 34      <GoodsCost>
 35        <SheetNumber>7</SheetNumber>
 36        <GoodsNumber>3</GoodsNumber>
 37        <MethodNumberCode>7</MethodNumberCode>
 38      </GoodsCost>
 39    </ROW1>
 40   </Object>
 41   <Object>
 42    <ROW2> 
 43     <NUM_PP>1</NUM_PP>
 44     <Comments>a</Comments> 
 45     <GoodsMark>
 46       <GoodsNumber>1</GoodsNumber>
 47       <Decision>
 48     <DecisionCode>a1</DecisionCode>   
 49     <DateInf>2021-02-20</DateInf>
 50     <DecisionDescription>Description1</DecisionDescription>
 51       </Decision>
 52     </GoodsMark>
 53     <GoodsMark>
 54      <GoodsNumber>2</GoodsNumber>
 55      <Decision>
 56     <DecisionCode>a2</DecisionCode>   
 57     <DateInf>2021-02-22</DateInf>
 58     <DecisionDescription>Description2</DecisionDescription>
 59      </Decision>
 60     </GoodsMark>
 61    </ROW2>
 62   </Object>
 63  </ED_Container>') xml_file from dual)
 64  select NUM_PP,SHEET_N,GOOD_N,  NMET,  DC,DC_DATE, DC_DESC
 65             from  tx,xmltable ('/ED_Container/Object/ROW1'
 66      PASSING xml_file COLUMNS  
 67           NUM_PP FOR ORDINALITY ,
 68             tab_xml_ XMLTYPE PATH 'GoodsCost') ,
 69        xmltable ('GoodsCost'  
 70        PASSING tab_xml_  COLUMNS 
 71             SHEET_N              NUMBER(5) PATH  'SheetNumber',
 72             GOOD_N NUMBER(5) PATH  'GoodsNumber',
 73             NMET VARCHAR2(2) PATH  'MethodNumberCode') ,
 74        xmltable('/ED_Container/Object/ROW2/GoodsMark'   
 75     PASSING xml_file, NUM_PP as "p1",GOOD_N as "p2"   COLUMNS 
 76        NUMP  NUMBER PATH  './../NUM_PP',
 77        GOOD_N2 NUMBER(5) PATH  'GoodsNumber',
 78        DC VARCHAR2(2) PATH  'Decision/DecisionCode',
 79        DC_DATE DATE PATH  'Decision/DateInf',
 80        DC_DESC VARCHAR2(50) PATH  'Decision/DecisionDescription')
 81        where NUM_PP=NUMP(+) and GOOD_N=GOOD_N2(+);

    NUM_PP    SHEET_N     GOOD_N NM DC DC_DATE   DC_DESC
---------- ---------- ---------- -- -- --------- --------------------------------------------------
         1          1          1 1  a1 20-FEB-21 Description1
         1          2          2 2  a2 22-FEB-21 Description2
         1          3          3 2
         2          5          1 5
         2          6          2 6
         2          7          3 7

6 rows selected.



Но почему Xpath переменную то не видит?
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разбор XML с указанием значения узла в путях
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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