我有以下类型的结果集的甲骨文从数据库返回的:执行子查询的一个结果在Oracle中创建一个XML
**Name Type SubName Number**
test B tim 1
test B jfd 2
testV I rr 1
testV I sim 2
dsgsg B sgsg 1
dsgsg B sfsfssfsffs 2
我想是使用SQL创建一个操纵这个结果这种类型的
<NameList>
<Name/>
<Type/>
<SubNameList>
<SubName>
<Name/>
<Number/>
</SubName>
</SubNameList>
</NameList>
例如XML:对于前两条记录结果集的名称相同,因此XML将是:
<NameList>
<Name>test</Name>
<Type>B</Type>
<SubNameList>
<SubName>
<Name>tim</Name>
<Number>1</Number>
</SubName>
<SubName>
<Name>jfd</Name>
<Number>2</Number>
</SubName>
</SubNameList>
</NameList>
我迄今所做的: 我有两个表为:
TABLE1
**ID NAME KEY**
1 test 101
1 testV 102
1 dsgsg 103
TABLE2
**ID SUBNAME TYPE NUMBER KEY**
1 tim B 1 101
1 jfd B 2 101
1 rr I 1 102
1 sim I 2 102
1 sgsg B 1 103
1 sfsfssfsffs B 2 103
SQL:
Select A.NAME, B.TYPE, B.SUBNAME, B.NUMBER
FROM TABLE1 A INNER JOIN TABLE2 B
ON A.ID = B.ID WHERE A.ID = '1';
我一直在使用XMLELEMENT()创建的XML在Oracle为:
SET SERVEROUTPUT ON;
DECLARE NAME_XML XMLTYPE;
v_offset number := 1;
v_chunk_size number := 255;
BEGIN
Select XMLAGG(XMLELEMENT("NAMELIST",
XMLELEMENT("Name", A.NAME),
XMLELEMENT("Type", B.TYPE),
XMLELEMENT("SubName", B.SUBNAME),
XMLELEMENT("Number", B.NUMBER)))
INTO NAME_XML
FROM TABLE1 A INNER JOIN TABLE2 B
ON A.ID = B.ID WHERE A.ID = '1';
loop
exit when v_offset > dbms_lob.getlength(NAME_XML.getClobVal());
dbms_output.put_line(dbms_lob.substr(NAME_XML.getClobVal(),
v_chunk_size, v_offset));
v_offset := v_offset + v_chunk_size;
end loop;
END;
该XML正在建造中:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<NAMELIST>
<Name>test</Name>
<Type>B</Type>
<SubName>tim</SubName>
<Number>1</Number>
</NAMELIST>
.
.
.
.
.
<NAMELIST>
<Name>dsgsg</Name>
<Type>B</Type>
<SubName>sfsfssfsffs</SubName>
<Number>2</Number>
</NAMELIST>
</root>
我怎样才能实现这种类型的XML格式:
<NameList>
<Name>test</Name>
<Type>B</Type>
<SubNameList>
<SubName>
<Name>tim</Name>
<Number>1</Number>
</SubName>
<SubName>
<Name>jfd</Name>
<Number>2</Number>
</SubName>
</SubNameList>
</NameList>
....
....
....
....
任何投入将是有益的。
@jarlh我使用Oracle并从中删除了mysql标签 –