ITPub博客

首页 > 数据库 > Oracle > 使用XMLELEMENT构建xml信息

使用XMLELEMENT构建xml信息

原创 Oracle 作者:hanjs 时间:2007-02-05 13:52:35 0 删除 编辑
目前做个项目中有个接口,接口约定格式为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博客 ” ,链接:https://blog.itpub.net/7659204/viewspace-897392/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-01-09

  • 博文量
    23
  • 访问量
    83802