구조가 각 행에 대해 동일하면 템플릿을 설정할 수 있습니다. 예 :
SQL> create table source
2 (
3 id number,
4 cola varchar2(20),
5 colb number
6 );
Table created.
SQL>
SQL> insert into source values (1, 'teststr', 23898.234);
1 row created.
SQL> insert into source values (2, '', -9989.00);
1 row created.
SQL> insert into source values (3, 'test again', 0);
1 row created.
SQL> commit;
Commit complete.
SQL>
SQL>
SQL> with xml_template as (select xmltype(
2 '<root>
3 <somefield>asdas</somefield>
4 <somefield2>asdas</somefield2>
5 <typ>
6 <col1>.</col1>
7 </typ>
8 <col2>.</col2>
9 <col3>.</col3>
10 </root>') xml
11 from dual)
12 select updatexml(
13 xt.xml,
14 '/root/typ/col1/text()', s.id,
15 '/root/col2/text()', s.cola,
16 '/root/col3/text()', s.colb)
17 from xml_template xt
18 cross join source s;
UPDATEXML(XT.XML,'/ROOT/TYP/COL1/TEXT()',S.ID,'/ROOT/COL2/TEXT()',S.COLA,'/ROOT/
--------------------------------------------------------------------------------
<root>
<somefield>asdas</somefield>
<somefield2>asdas</somefield2>
<typ>
<col1>1</col1>
</typ>
<col2>teststr</col2>
<col3>23898.234</col3>
</root>
<root>
<somefield>asdas</somefield>
<somefield2>asdas</somefield2>
<typ>
<col1>2</col1>
</typ>
<col2/>
<col3>-9989</col3>
</root>
<root>
<somefield>asdas</somefield>
<somefield2>asdas</somefield2>
<typ>
<col1>3</col1>
</typ>
<col2>test again</col2>
<col3>0</col3>
</root>
따라서 updatexml
은 행마다 다른 필드를 채울뿐입니다.
u는 XML 형식의 데이터 형식으로 데이터베이스에서 데이터를 가져 오시겠습니까? –
하나의 테이블 (데이터는 숫자, varchar 등의 형식)에서 다른 테이블 (데이터는 xml 형식)으로 데이터를 내보내야합니다. 50 개 이상의 필드가 있으며 XML 문서에는 많은 노드가 있으므로 상수 일뿐입니다. XMLelement를 사용하여 각 노드를 생성하여 전체 XML 문서를 작성하지 않는 방법이 있는지 궁금합니다. 기존 XML 문서 (상수 필드가 채워져 있음)를 가져 와서 SELECT 문에서 필요한 데이터 만 변경하면됩니다. – Jandrejc