使用XMLELEMENT构建xml信息

目前做个项目中有个接口,接口约定格式为xml,最初我们支持是这样处理的:把查询出来的记录在前台通过dom4j来构建xml信息。后来我通过oracle提供的XMLELEMENT函数来在数据库中构建了,下面把使用方法介绍一下,希望对有这样需求的朋友有帮助!

准备测试数据:

create table teacher (id varchar2(10),name varchar2(20),remark varchar2(50));
create table course (id varchar2(10),name varchar2(50),tid varchar2(10));

insert into teacher values ('101','张老师','数学专业硕士);
insert into teacher('102','王老师','英语专业硕士');

insert into course values ('001','高等数学','101');
insert into course values ('002','离散数学','101');
insert into course values ('003','线性代数','101');
insert into course values ('004','大学英语','102');
commit;

下面先查询出老师的信息,根据具体的名称来组织。

select XMLELEMENT( NAME DATA,--构建根节点
XMLATTRIBUTES( 'teacher' AS TYPE ),--构建属性
XMLELEMENT("ID",id),--构建子节点
XMLELEMENT("NAME",name),
XMLELEMENT("REMARK",remark)
).GETSTRINGVAL() --转换为字符类型,否则为clob
from teacher;

101张老师数学专业硕士

102王老师英语专业硕士

是不是很清晰呢?要是在前台构建xml信息代码会显得很臃肿!

上面的代码还可以简化些!
select XMLELEMENT( NAME DATA,
XMLATTRIBUTES( 'teacher' AS TYPE ),
XMLFOREST(Id "ID",Name "NAME",remark "REMARK")
).GETSTRINGVAL()
from teacher;

那么如果存在主从表的关系,如何使用这个函数处理呢?
看下面的例子,想显示老师的信息,以及他所讲的课程信息。

select XMLELEMENT( NAME DATA,
XMLATTRIBUTES( 'teacher' AS TYPE ),
XMLELEMENT("ID",a.id),
XMLELEMENT("NAME",a.name),
XMLELEMENT("REMARK",a.remark),
XMLAGG(XMLELEMENT( "course", --在内部又构建一个跟节点做为扩展
XMLELEMENT( "ID", b.Id),
XMLELEMENT( "NAME",b.Name)
)
)).GETSTRINGVAL()
from teacher a,course b
Where a.id = b.tid(+)
Group By a.id,a.name,a.remark;--注意必须有group by

显示的信息如下:
101张老师数学专业硕士001高等数学002离散数学003线性代数

102王老师英语专业硕士004大学英语

估计上面的例子已经能满足大家的使用了。
[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7659204/viewspace-897392/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7659204/viewspace-897392/

你可能感兴趣的:(使用XMLELEMENT构建xml信息)