如何从oracle生成xml
我有两张桌子如下 餐桌上的学生 表标记如何从oracle生成xml,xml,oracle,Xml,Oracle,我有两张桌子如下 餐桌上的学生 表标记 mark_id person_id subject marks 1 1 English 50 2 1 Maths 75 下面的查询给出如下所示的xml select XMLElement( "Students" , (select XMLAgg( XMLElement("Student" ,
mark_id person_id subject marks
1 1 English 50
2 1 Maths 75
下面的查询给出如下所示的xml
select XMLElement( "Students" ,
(select XMLAgg( XMLElement("Student" ,
XmlElement( "Student_id","id") ,
XmlElement( "First_Name","firstname")
))
FROM students )
)
AS "RESULT"
From dual
<Students>
<Student>
<Student_id>1</Student_id>
<First_Name>John</First_Name>
</Student>
<Student>
<Student_id>2</Student_id>
<First_Name>Mike</First_Name>
</Student>
<Students>
如何实现如果我编写select查询,它将为第一个学生返回两行,因为它在第二个标记表中有两行要连接
select XMLElement(
"Students" ,
XMLAgg(
XMLElement(
"Student" ,
XMLFOREST(
s."Student_id" AS "id",
s."First_Name" AS "firstname"
),
m.marks
)
)
)
FROM students s
LEFT OUTER JOIN
( SELECT person_id,
XMLELEMENT(
"Marks",
XMLAGG(
XMLFOREST(
"subject",
"marks" AS "mark"
)
)
) AS marks
FROM Marks
) m
ON ( s."PersonID" = m.person_id )
注:除非有特定的业务需求,否则为:;只需在任何地方使用不带引号的标识符,并让oracle管理不区分大小写。取决于需求。如果有多个标记,并且每个学生只能有一行,则可以使用group by子句。@AluanHaddad可以有多个主题和标记供学生使用,有时没有标记。所以我使用左连接学生作为学生左连接标记作为。。。。分组方式。。。
<Students>
<Student>
<Student_id>1</Student_id>
<First_Name>John</First_Name>
<Marks>
<subject>English</subject>
<mark>50</mark>
<subject>Maths</subject>
<mark>75</mark>
</Marks>
</Student>
<Student>
<Student_id>2</Student_id>
<First_Name>Mike</First_Name>
<Marks/>
</Student>
<Students>
select XMLElement(
"Students" ,
XMLAgg(
XMLElement(
"Student" ,
XMLFOREST(
s."Student_id" AS "id",
s."First_Name" AS "firstname"
),
m.marks
)
)
)
FROM students s
LEFT OUTER JOIN
( SELECT person_id,
XMLELEMENT(
"Marks",
XMLAGG(
XMLFOREST(
"subject",
"marks" AS "mark"
)
)
) AS marks
FROM Marks
) m
ON ( s."PersonID" = m.person_id )