Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вывод результатов запроса в XML по известной структуре / 25 сообщений из 41, страница 1 из 2
01.01.2019, 11:05
    #39755348
Dual_Bios
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
Столкнулся с проблемой, надо выгрузить результаты запроса в файл в формате XML. Смущает что пакетов несколько, про количество функций молчу, опыта подобных выгрузок 0,00%, не очень понятно где копать. Был бы благодарен если направите на путь истинный как это сделать проще и посовременние. Oracle 12, имеются на руках примеры файлов XML которые должны получиться, а также схема файла для выгрузки в формате XSD.

Есть ли возможность чтобы при запросе указать такой вот XSD (ну выдрав предварительно его структуру и исполоьзвать его содержимое как входной параметр, запрос еще одним параметром) на выходе получить такой вот правильный XML. Если кинете ссылку на пример буду благодарен особенно

Заранее спасибо


P.S.Доброго дня и с наступившим НГ :)
...
Рейтинг: 0 / 0
01.01.2019, 13:46
    #39755362
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
RTFM XML DB Developer Guide
...
Рейтинг: 0 / 0
01.01.2019, 15:56
    #39755373
Dual_Bios
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
Elic,

а немножко более развернуто можно, в какой части по Вашему мнению искать ответы ?
...
Рейтинг: 0 / 0
01.01.2019, 16:48
    #39755381
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
createSchemaBasedXML

SY.
...
Рейтинг: 0 / 0
01.01.2019, 17:49
    #39755387
Dual_Bios
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
Из того что прочел , у меня создалось впечатление что XSD будет использован только для проверки - по формату/не по формату сгенерированный файл, но для механизма собственно генерации это не поможет . Это так ?

У меня файл XML будет несколько уровней, то есть если я правильно понял по доыольно скудным примерам для DBMS_XMLGEN надо будет соответствующие типы создать..

Все-таки хотелось бы ясности, смотреть в сторону DBMS_XMLGEN.getxml или все же можно XSD для ГЕНЕРАЦИИ облегчить реализации
...
Рейтинг: 0 / 0
01.01.2019, 18:00
    #39755390
Dual_Bios
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
Пример сгенерированного XML каким он должен быть
Код: xml
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.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
<Report xmlns="http://www.jaxb.msp/report/IncomeReport">
	<DateCreate>2018-12-11</DateCreate>
	<Dognum>809112</Dognum>
	<ReportType>1</ReportType>
	<BnfMonth>2018-09-01</BnfMonth>
	<Check1>0.00</Check1>
	<Check2>1012.99</Check2>
	<Check3>0.00</Check3>
	<Check4>0.00</Check4>
	<Beneficiaries>
		<Beneficiary>
			<MoID>809</MoID>
			<PayID>1157897065</PayID>
			<NUMLS>1230987</NUMLS>
			<SNILS>012-721-011 00</SNILS>
			<Name1>Иванов</Name1>
			<Name2>Иван</Name2>
			<Name3>Иванович</Name3>
			<StreetID>12670</StreetID>
			<HouseNum>12</HouseNum>
			<CorpusNum>3</CorpusNum>
			<BuildingNum>1</BuildingNum>
			<Flat>15</Flat>
			<UNOM>5432</UNOM>
			<HouseFIAS>123</HouseFIAS>
			<Phone>4990010101</Phone>
			<OccupType>2</OccupType>
			<OwnProperty>1</OwnProperty>
			<PPLReg>2</PPLReg>
			<PPLCnt>2</PPLCnt>
			<TotalSquare>56.7</TotalSquare>
			<Gender>М</Gender>
			<Birthday>1950-05-12</Birthday>
			<OwnSquare>28.7</OwnSquare>
			<RegType>1</RegType>
			<LivingType>1</LivingType>
			<DocType>21</DocType>
			<DocSeries>4509</DocSeries>
			<DocNumber>987608</DocNumber>
			<DocDate>2006-09-05</DocDate>
			<DocOrg>ОВД</DocOrg>
			<FamilyMembers>
				<FamilyMember>
					<SNILS>015-725-041 08</SNILS>
					<Name1>Иванова</Name1>
					<Name2>Анна</Name2>
					<Name3>Егоровна</Name3>
					<Gender>Ж</Gender>
					<Birthday>1952-07-01</Birthday>
					<FamilyRelation>2</FamilyRelation>
					<OwnSquare>28</OwnSquare>
				</FamilyMember>
			</FamilyMembers>
			<Categories>
				<Category>
					<BenefitID>67</BenefitID>
					<Documents>
						<Document>
							<DocType>12</DocType>
							<DocSeries>АБ</DocSeries>
							<DocNumber>123</DocNumber>
							<DocDate>2010-08-07</DocDate>
							<DocOrg>МУСЗН</DocOrg>
						</Document>
					</Documents>
				        <Services>
 				          	<Service>
				              		<ServiceID>182</ServiceID>
 				             		<Tariff>188.53</Tariff>
				              		<ConsumerQty>1</ConsumerQty>
				              		<Quant>1.9955</Quant>
 				             		<BnfSquare>38.6</BnfSquare>
 				             		<Summa>188.10</Summa>
 				             		<TotalQuant>1.9955</TotalQuant>
 				           	</Service>
 				         </Services>
				</Category>
				<Category>
					<BenefitID>84</BenefitID>
					<Documents>
						<Document>
							<DocType>15</DocType>
							<DocSeries>МСЭ-2015</DocSeries>
							<DocNumber>567</DocNumber>
							<DocDate>2015-12-07</DocDate>
							<DocEnd>2016-12-07</DocEnd>
							<DocOrg>ВТЭК</DocOrg>
						</Document>
					</Documents>
				        <Services>
 				          	<Service>
				              		<ServiceID>33</ServiceID>
 				             		<Tariff>2279.95</Tariff>
				              		<ConsumerQty>1</ConsumerQty>
				              		<Quant>0.474371</Quant>
 				             		<BnfSquare>38.6</BnfSquare>
 				             		<Summa>540.77</Summa>
 				             		<TotalQuant>0.474371</TotalQuant>
 				           	</Service>
 				         </Services>
				</Category>
			</Categories>
		</Beneficiary>
		<Beneficiary>
			<MoID>809</MoID>
			<PayID>1157897065</PayID>
			<NUMLS>1230988</NUMLS>
			<SNILS>012-751-011 00</SNILS>
			<Name1>Петрова</Name1>
			<Name2>Ольга</Name2>
			<Name3>Ивановна</Name3>
			<StreetID>12670</StreetID>
			<HouseNum>12</HouseNum>
			<CorpusNum>3</CorpusNum>
			<BuildingNum>1</BuildingNum>
			<Flat>14</Flat>
			<UNOM>5432</UNOM>
			<HouseFIAS>123</HouseFIAS>
			<Phone>4990010102</Phone>
			<OccupType>2</OccupType>
			<OwnProperty>1</OwnProperty>
			<PPLReg>2</PPLReg>
			<PPLCnt>2</PPLCnt>
			<TotalSquare>56.7</TotalSquare>
			<Gender>М</Gender>
			<Birthday>1955-05-12</Birthday>
			<OwnSquare>28.7</OwnSquare>
			<RegType>1</RegType>
			<LivingType>1</LivingType>
			<DocType>21</DocType>
			<DocSeries>4509</DocSeries>
			<DocNumber>987609</DocNumber>
			<DocDate>2008-09-05</DocDate>
			<DocOrg>ОВД</DocOrg>
			<FamilyMembers>
				<FamilyMember>
					<SNILS>015-735-045 08</SNILS>
					<Name1>Петров</Name1>
					<Name2>Иван</Name2>
					<Name3>Петрович</Name3>
					<Gender>М</Gender>
					<Birthday>1953-07-01</Birthday>
					<FamilyRelation>2</FamilyRelation>
					<OwnSquare>28</OwnSquare>
				</FamilyMember>
			</FamilyMembers>
			<Categories>
				<Category>
					<BenefitID>68</BenefitID>
					<Documents>
						<Document>
							<DocType>12</DocType>
							<DocSeries>АБ</DocSeries>
							<DocNumber>125</DocNumber>
							<DocDate>2011-08-07</DocDate>
							<DocOrg>МУСЗН</DocOrg>
						</Document>
					</Documents>
				        <Services>
 				          	<Service>
				              		<ServiceID>182</ServiceID>
 				             		<Tariff>188.53</Tariff>
				              		<ConsumerQty>1</ConsumerQty>
				              		<Quant>0.333333</Quant>
 				             		<BnfSquare>17.6</BnfSquare>
 				             		<Summa>31.42</Summa>
 				             		<TotalQuant>0.999999</TotalQuant>
 				           	</Service>
 				         </Services>
				</Category>
				<Category>
					<BenefitID>84</BenefitID>
					<Documents>
						<Document>
							<DocType>15</DocType>
							<DocSeries>МСЭ-2016</DocSeries>
							<DocNumber>568</DocNumber>
							<DocDate>2016-12-07</DocDate>
							<DocEnd>2017-12-07</DocEnd>
							<DocOrg>ВТЭК</DocOrg>
						</Document>
					</Documents>
				        <Services>
 				          	<Service>
				              		<ServiceID>33</ServiceID>
 				             		<Tariff>1806.89</Tariff>
				              		<ConsumerQty>1</ConsumerQty>
				              		<Quant>0.279708</Quant>
 				             		<BnfSquare>17.6</BnfSquare>
 				             		<Summa>252.70</Summa>
 				             		<TotalQuant>0.839124</TotalQuant>
 				           	</Service>
 				         </Services>
				</Category>
			</Categories>
		</Beneficiary>
	</Beneficiaries>
</Report>
...
Рейтинг: 0 / 0
01.01.2019, 18:13
    #39755393
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
...
Рейтинг: 0 / 0
02.01.2019, 07:43
    #39755445
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
Dual_BiosИз того что прочел , у меня создалось впечатление что XSD будет использован только для проверки - по формату/не по формату сгенерированный файл, но для механизма собственно генерации это не поможет . Это так ?Ты не безнадёжен. Чудо-генератор сможет сосать данные из вакуума?
...
Рейтинг: 0 / 0
02.01.2019, 09:03
    #39755448
Dual_Bios
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
Elic,

данные-то я буду запросом доставать, я просто надеялся, что есть некий движок в который можно прописать соответствие XSD поля с полем в результаете запроса и который сам "отформатирует" включая вложенности.
...
Рейтинг: 0 / 0
02.01.2019, 09:07
    #39755449
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
Dual_Biosя просто надеялся, что есть некий движокЕсть: 21777382
...
Рейтинг: 0 / 0
02.01.2019, 09:24
    #39755451
Dual_Bios
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
ElicDual_Biosя просто надеялся, что есть некий движокЕсть: 21777382

Или я совсем туплю или мы говорим о разном. Изначально я предполагал что есть некая функция Х, где входные параметры А- текст запроса, B-текст шаблона XSD. Или XSD где-то зарегстрирован и B параметр ссылается на него). И функция по этому скелету вернет готовый XML

Вы даете мне ссылки , но эти функции как-то не укладываются у меня в какую-то единую конструкцию как бы это могло быть. Можете дать ссылку на ПРИМЕР что-то пусть очень отдаленного, но того что по Вашему мнению будет ориентиром КАК это надо сделать ? Чтобы какая-то общая картина нарисовалась в голове
...
Рейтинг: 0 / 0
02.01.2019, 09:29
    #39755452
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
Dual_Biosя предполагал что есть некая функция Х, где входные параметры А- текст запросаПредположи более приземлённо: как мог бы выглядеть запросDual_Biosвключая вложенности
...
Рейтинг: 0 / 0
02.01.2019, 10:17
    #39755455
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
Dual_Bios,

Попробуй посмотреть на xsl трансформации
...
Рейтинг: 0 / 0
02.01.2019, 10:38
    #39755457
Dual_Bios
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
Elic,

для начала мне надо понять базово, какой пакет и функция будет задействована. Из того что я нашел, я так понял что есть две основные альтернативы, или
что то типа такого решения (ну понятно более насыщенного)
Код: 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.
39.
40.
41.
42.
declare    
      
      l_directory    varchar2(30) := 'TMP_DIR';    
      l_filename     varchar2(256) := 'test.xml';    
      l_xml          xmltype;    
      l_schema_url   varchar2(256) := 'http://xmlns.oracle.com/xml/student_content.xsd';   
      
      l_xlist        xmlsequencetype := xmlsequencetype();  
      l_output       clob;    
      
      cursor c_xml is  
      select xmlelement("Description"      
             , xmlelement("Key", t.description)      
             ) as doc  
      from my_table t;     
      
    begin    
      
      for r in c_xml loop  
      
        l_xml := r.doc.createSchemaBasedXML(l_schema_url);  
        l_xml.schemaValidate();  
      
        l_xlist.extend;  
        l_xlist(l_xlist.last) := l_xml;  
      
      end loop;  
      
      -- aggregate all validated instances into a single XML fragment :   
      select xmlserialize(content xmlagg(t.column_value))  
      into l_output  
      from table(l_xlist) t;  
      
      dbms_xslprocessor.clob2file(    
        l_output
      , l_directory  
      , l_filename  
      , nls_charset_id('AL32UTF8')  
      );    
      
    end;    
        



Или через dbms_xmlgen.getxml

Пытаюсь понять по какой ветке пойти
...
Рейтинг: 0 / 0
02.01.2019, 10:46
    #39755459
Dual_Bios
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
ElicDual_Biosя предполагал что есть некая функция Х, где входные параметры А- текст запросаПредположи более приземлённо: как мог бы выглядеть запросDual_Biosвключая вложенности
Ну или тупая плоская таблица , где левая часть тупо бы дублилась в рамках одного узла, если бы как-от можно было бы директинво указать что эти поля узлы, либо через cast(collect( c приведением к типам
...
Рейтинг: 0 / 0
02.01.2019, 10:59
    #39755460
Dual_Bios
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
MasterZivDual_Bios,

Попробуй посмотреть на xsl трансформации

Хм, посмотрел но пока вижу только взаимоотношения с готовый XML который у меня еще должен как-то получиться. А пока я еще для себя не понял каким способом его стоит получать
...
Рейтинг: 0 / 0
02.01.2019, 11:17
    #39755462
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
Dual_BiosА пока я еще для себя не понял каким способом его стоит получать https://www.sql.ru/forum/actualsearch.aspx?search=xmlelement xmlagg&sin=0&bid=3&a=&ma=0&dt=-1&s=1&so=1
...
Рейтинг: 0 / 0
02.01.2019, 17:56
    #39755537
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
Dual_BiosХм, посмотрел но пока вижу только взаимоотношения с готовый XML который у меня еще должен как-то получиться. А пока я еще для себя не понял каким способом его стоит получать

Запрос имеешь, ну так добавь агрегацию и используй XMLELEMENT + XMLAGG + (по вкусу) XMLSERIALIZE . Например запрос:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT  D.DEPTNO,
        D.DNAME,
        D.LOC,
        E.EMPNO,
        E.ENAME,
        E.JOB,
        E.SAL,
  FROM  DEPT D,
        EMP E
  WHERE E.DEPTNO = D.DEPTNO
/  



Добавляем агрегацию, XMLELEMENT, XMLAGG, XMLSERIALIZE:

Код: 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.
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.
SELECT  XMLSERIALIZE(
                     DOCUMENT
                     XMLELEMENT(
                                "ORGANIZATION",
                                XMLELEMENT(
                                           "DEPARTMENTS",
                                           XMLAGG(
                                                  XMLELEMENT(
                                                             "DEPARTMENT",
                                                             XMLELEMENT(
                                                                        "NUMBER",
                                                                        D.DEPTNO
                                                                       ),
                                                             XMLELEMENT(
                                                                        "NAME",
                                                                        MAX(D.DNAME)
                                                                       ),
                                                             XMLELEMENT(
                                                                        "LOCATION",
                                                                        MAX(D.LOC)
                                                                       ),
                                                             XMLELEMENT(
                                                                        "EMPLOYEES",
                                                                        XMLAGG(
                                                                               XMLELEMENT(
                                                                                          "EMPLOYEE",
                                                                                          XMLELEMENT(
                                                                                                     "EMPNO",
                                                                                                     E.EMPNO
                                                                                                    ),
                                                                                          XMLELEMENT(
                                                                                                     "ENAME",
                                                                                                     E.ENAME
                                                                                                    ),
                                                                                          XMLELEMENT(
                                                                                                     "JOB",
                                                                                                     E.JOB
                                                                                                    ),
                                                                                          XMLELEMENT(
                                                                                                     "SAL",
                                                                                                     E.SAL
                                                                                                    )
                                                                                         )
                                                                                  )
                                                                       )
                                                            )
                                                 )
                                          )
                               )
                     INDENT
                       SIZE = 2
                    ) ORGANIZATION
  FROM  DEPT D,
        EMP E
  WHERE E.DEPTNO = D.DEPTNO
  GROUP BY D.DEPTNO
/

ORGANIZATION
---------------------------------------------------------
<ORGANIZATION>
  <DEPARTMENTS>
    <DEPARTMENT>
      <NUMBER>10</NUMBER>
      <NAME>ACCOUNTING</NAME>
      <LOCATION>NEW YORK</LOCATION>
      <EMPLOYEES>
        <EMPLOYEE>
          <EMPNO>7782</EMPNO>
          <ENAME>CLARK</ENAME>
          <JOB>MANAGER</JOB>
          <SAL>2450</SAL>
        </EMPLOYEE>
        <EMPLOYEE>
          <EMPNO>7934</EMPNO>
          <ENAME>MILLER</ENAME>
          <JOB>CLERK</JOB>
          <SAL>1300</SAL>
        </EMPLOYEE>
        <EMPLOYEE>
          <EMPNO>7839</EMPNO>
          <ENAME>KING</ENAME>
          <JOB>PRESIDENT</JOB>
          <SAL>5000</SAL>
        </EMPLOYEE>
      </EMPLOYEES>
    </DEPARTMENT>
    <DEPARTMENT>
      <NUMBER>20</NUMBER>
      <NAME>RESEARCH</NAME>
      <LOCATION>DALLAS</LOCATION>
      <EMPLOYEES>
        <EMPLOYEE>
          <EMPNO>7369</EMPNO>
          <ENAME>SMITH</ENAME>
          <JOB>CLERK</JOB>
          <SAL>800</SAL>
        </EMPLOYEE>
        <EMPLOYEE>
          <EMPNO>7902</EMPNO>
          <ENAME>FORD</ENAME>
          <JOB>ANALYST</JOB>
          <SAL>3000</SAL>
        </EMPLOYEE>
        <EMPLOYEE>
          <EMPNO>7876</EMPNO>
          <ENAME>ADAMS</ENAME>
          <JOB>CLERK</JOB>
          <SAL>1100</SAL>
        </EMPLOYEE>
        <EMPLOYEE>
          <EMPNO>7788</EMPNO>
          <ENAME>SCOTT</ENAME>
          <JOB>ANALYST</JOB>
          <SAL>3000</SAL>
        </EMPLOYEE>
        <EMPLOYEE>
          <EMPNO>7566</EMPNO>
          <ENAME>JONES</ENAME>
          <JOB>MANAGER</JOB>
          <SAL>2975</SAL>
        </EMPLOYEE>
      </EMPLOYEES>
    </DEPARTMENT>
    <DEPARTMENT>
      <NUMBER>30</NUMBER>
      <NAME>SALES</NAME>
      <LOCATION>CHICAGO</LOCATION>
      <EMPLOYEES>
        <EMPLOYEE>
          <EMPNO>7499</EMPNO>
          <ENAME>ALLEN</ENAME>
          <JOB>SALESMAN</JOB>
          <SAL>2600</SAL>
        </EMPLOYEE>
        <EMPLOYEE>
          <EMPNO>7900</EMPNO>
          <ENAME>JAMES</ENAME>
          <JOB>CLERK</JOB>
          <SAL>950</SAL>
        </EMPLOYEE>
        <EMPLOYEE>
          <EMPNO>7844</EMPNO>
          <ENAME>TURNER</ENAME>
          <JOB>SALESMAN</JOB>
          <SAL>1500</SAL>
        </EMPLOYEE>
        <EMPLOYEE>
          <EMPNO>7698</EMPNO>
          <ENAME>BLAKE</ENAME>
          <JOB>MANAGER</JOB>
          <SAL>2850</SAL>
        </EMPLOYEE>
        <EMPLOYEE>
          <EMPNO>7654</EMPNO>
          <ENAME>MARTIN</ENAME>
          <JOB>SALESMAN</JOB>
          <SAL>1250</SAL>
        </EMPLOYEE>
        <EMPLOYEE>
          <EMPNO>7521</EMPNO>
          <ENAME>WARD</ENAME>
          <JOB>SALESMAN</JOB>
          <SAL>1250</SAL>
        </EMPLOYEE>
      </EMPLOYEES>
    </DEPARTMENT>
  </DEPARTMENTS>
</ORGANIZATION>


SQL> 



SY.
...
Рейтинг: 0 / 0
02.01.2019, 19:34
    #39755553
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
SY,

если есть время и натхнення

уровней больше одного (deptno, job, enpno)?
напр
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
  1  select d.deptno,d.dname,e.job,e.empno,e.ename,e.sal
  2* from dept d,emp e where d.deptno=e.deptno order by d.deptno,e.job
SQL> /

    DEPTNO DNAME          JOB            EMPNO ENAME             SAL
---------- -------------- --------- ---------- ---------- ----------
        10 ACCOUNTING     CLERK           7934 MILLER           1300
                          MANAGER         7782 CLARK            2450
                          PRESIDENT       7839 KING             5000
        20 RESEARCH       ANALYST         7788 SCOTT            3000
                                          7902 FORD             3000
                          CLERK           7369 SMITH             800
                                          7876 ADAMS            1100
                          MANAGER         7566 JONES            2975
        30 SALES          CLERK           7900 JAMES             950
                          MANAGER         7698 BLAKE            2850
                          SALESMAN        7499 ALLEN            1600
                                          7521 WARD             1250
                                          7654 MARTIN           1250
                                          7844 TURNER           1500





.....
stax
...
Рейтинг: 0 / 0
02.01.2019, 20:49
    #39755567
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
Код: 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.
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.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
WITH T AS (
           SELECT  DEPTNO,
                   JOB,
                   XMLELEMENT(
                              "EMPLOYEES",
                               XMLAGG(
                                      XMLELEMENT(
                                                 "EMPLOYEE",
                                                 XMLELEMENT(
                                                            "NUMBER",
                                                            EMPNO
                                                           ),
                                                 XMLELEMENT(
                                                            "NAME",
                                                            ENAME
                                                           ),
                                                 XMLELEMENT(
                                                            "SALARY",
                                                            SAL
                                                           )
                                                )
                                     )
                             ) JOB_EMPLOYEES
              FROM  EMP
              GROUP BY DEPTNO,
                       JOB
           )
SELECT  XMLSERIALIZE(
                     DOCUMENT
                     XMLELEMENT(
                                "ORGANIZATION",
                                XMLELEMENT(
                                           "DEPARTMENTS",
                                           XMLAGG(
                                                  XMLELEMENT(
                                                             "DEPARTMENT",
                                                             XMLELEMENT(
                                                                        "NUMBER",
                                                                        D.DEPTNO
                                                                       ),
                                                             XMLELEMENT(
                                                                        "NAME",
                                                                        MAX(D.DNAME)
                                                                       ),
                                                             XMLELEMENT(
                                                                        "LOCATION",
                                                                        MAX(D.LOC)
                                                                       ),
                                                             XMLELEMENT(
                                                                        "JOBS",
                                                                        XMLAGG(
                                                                               XMLELEMENT(
                                                                                          "JOB",
                                                                                          XMLELEMENT(
                                                                                                     "TITLE",
                                                                                                     T.JOB
                                                                                                    ),
                                                                                          T.JOB_EMPLOYEES
                                                                                         )
                                                                              )
                                                                       )
                                                            )
                                                 )
                                          )
                               )
                     INDENT
                       SIZE = 2
                    ) ORGANIZATION
  FROM  DEPT D,
        T
  WHERE T.DEPTNO = D.DEPTNO
  GROUP BY D.DEPTNO
/

ORGANIZATION
---------------------------------------------
<ORGANIZATION>
  <DEPARTMENTS>
    <DEPARTMENT>
      <NUMBER>10</NUMBER>
      <NAME>ACCOUNTING</NAME>
      <LOCATION>NEW YORK</LOCATION>
      <JOBS>
        <JOB>
          <TITLE>CLERK</TITLE>
          <EMPLOYEES>
            <EMPLOYEE>
              <NUMBER>7934</NUMBER>
              <NAME>MILLER</NAME>
              <SALARY>1300</SALARY>
            </EMPLOYEE>
          </EMPLOYEES>
        </JOB>
        <JOB>
          <TITLE>PRESIDENT</TITLE>
          <EMPLOYEES>
            <EMPLOYEE>
              <NUMBER>7839</NUMBER>
              <NAME>KING</NAME>
              <SALARY>5000</SALARY>
            </EMPLOYEE>
          </EMPLOYEES>
        </JOB>
        <JOB>
          <TITLE>MANAGER</TITLE>
          <EMPLOYEES>
            <EMPLOYEE>
              <NUMBER>7782</NUMBER>
              <NAME>CLARK</NAME>
              <SALARY>2450</SALARY>
            </EMPLOYEE>
          </EMPLOYEES>
        </JOB>
      </JOBS>
    </DEPARTMENT>
    <DEPARTMENT>
      <NUMBER>20</NUMBER>
      <NAME>RESEARCH</NAME>
      <LOCATION>DALLAS</LOCATION>
      <JOBS>
        <JOB>
          <TITLE>CLERK</TITLE>
          <EMPLOYEES>
            <EMPLOYEE>
              <NUMBER>7369</NUMBER>
              <NAME>SMITH</NAME>
              <SALARY>800</SALARY>
            </EMPLOYEE>
            <EMPLOYEE>
              <NUMBER>7876</NUMBER>
              <NAME>ADAMS</NAME>
              <SALARY>1100</SALARY>
            </EMPLOYEE>
          </EMPLOYEES>
        </JOB>
        <JOB>
          <TITLE>MANAGER</TITLE>
          <EMPLOYEES>
            <EMPLOYEE>
              <NUMBER>7566</NUMBER>
              <NAME>JONES</NAME>
              <SALARY>2975</SALARY>
            </EMPLOYEE>
          </EMPLOYEES>
        </JOB>
        <JOB>
          <TITLE>ANALYST</TITLE>
          <EMPLOYEES>
            <EMPLOYEE>
              <NUMBER>7788</NUMBER>
              <NAME>SCOTT</NAME>
              <SALARY>3000</SALARY>
            </EMPLOYEE>
            <EMPLOYEE>
              <NUMBER>7902</NUMBER>
              <NAME>FORD</NAME>
              <SALARY>3000</SALARY>
            </EMPLOYEE>
          </EMPLOYEES>
        </JOB>
      </JOBS>
    </DEPARTMENT>
    <DEPARTMENT>
      <NUMBER>30</NUMBER>
      <NAME>SALES</NAME>
      <LOCATION>CHICAGO</LOCATION>
      <JOBS>
        <JOB>
          <TITLE>CLERK</TITLE>
          <EMPLOYEES>
            <EMPLOYEE>
              <NUMBER>7900</NUMBER>
              <NAME>JAMES</NAME>
              <SALARY>950</SALARY>
            </EMPLOYEE>
          </EMPLOYEES>
        </JOB>
        <JOB>
          <TITLE>SALESMAN</TITLE>
          <EMPLOYEES>
            <EMPLOYEE>
              <NUMBER>7499</NUMBER>
              <NAME>ALLEN</NAME>
              <SALARY>2600</SALARY>
            </EMPLOYEE>
            <EMPLOYEE>
              <NUMBER>7844</NUMBER>
              <NAME>TURNER</NAME>
              <SALARY>1500</SALARY>
            </EMPLOYEE>
            <EMPLOYEE>
              <NUMBER>7654</NUMBER>
              <NAME>MARTIN</NAME>
              <SALARY>1250</SALARY>
            </EMPLOYEE>
            <EMPLOYEE>
              <NUMBER>7521</NUMBER>
              <NAME>WARD</NAME>
              <SALARY>1250</SALARY>
            </EMPLOYEE>
          </EMPLOYEES>
        </JOB>
        <JOB>
          <TITLE>MANAGER</TITLE>
          <EMPLOYEES>
            <EMPLOYEE>
              <NUMBER>7698</NUMBER>
              <NAME>BLAKE</NAME>
              <SALARY>2850</SALARY>
            </EMPLOYEE>
          </EMPLOYEES>
        </JOB>
      </JOBS>
    </DEPARTMENT>
  </DEPARTMENTS>
</ORGANIZATION>


SQL> 



SY.
...
Рейтинг: 0 / 0
03.01.2019, 07:34
    #39755615
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
SY
Код: plsql
1.
                                                                                                     "TITLE",

За такие отступы надо отрывать руки.
IMHO
...
Рейтинг: 0 / 0
03.01.2019, 09:34
    #39755626
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
SY,

Спасибо, я так примерно и делал
Надеялся что есть какой-то трюк

.....
stax
...
Рейтинг: 0 / 0
05.01.2019, 11:10
    #39756029
Dual_Bios
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
Прочитал, большое спасибо за примеры. Что напрягает меня в тернистом пути поиска правильного решения - большой объем выборки на основе которой будет строиться XML - порядка 1,5 миллионов строк данных в базовой таблице, к которой будет подтягиваться детализация раз в 5 больше... Раньше все это из запроса по порциям складировалось в CSV (делалось на толстом клиенте, там еще ряд постдействий не связанных с выгрузкой делался потому и на толстом) .

Допустим здесь тоже порционно можно писать, а потом на трансформе это не умрет ?
...
Рейтинг: 0 / 0
05.01.2019, 11:22
    #39756031
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
Dual_Biosбудет строиться XML - порядка 1,5 миллионов строк данных в базовой таблице, к которой будет подтягиваться детализация раз в 5 больше...Dual_Biosа потом на трансформе это не умрет ?Нужно задаться вопросом, а не поперхнётся ли следующий приёмник.

Архитекторы всё больше дебилизируются…
...
Рейтинг: 0 / 0
05.01.2019, 11:50
    #39756036
Dual_Bios
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод результатов запроса в XML по известной структуре
Elic, таковы требования сторонней организации (монополиста), которой мы передаем файл с данными, читать-то наверно легче чем писать..
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вывод результатов запроса в XML по известной структуре / 25 сообщений из 41, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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