将数据库中的数据发布为XML文档


将数据库中的数据发布为XML文档

一,使用XML SPY 工具
 1,在 转换(C)  中选择 导入数据库数据(Import Database 。。。)。
 2,配置数据源。
 3,选择数据库表,获取表中的数据。
  例如Oracle的EMP表
  select EMPNO, ENAME,JOB,MGR,
   to_char(HIREDATE,'yyyy-mm-dd') as HIREDATE, SAL,COMM, DEPTNO
  from emp;
 4,选择预览,设置导入。
  (1)匹配数据类型。
  例如Oracle的EMP表中的HIREDATE列。对日期进行格式化。
   to_char(HIREDATE,'yyyy-mm-dd') as HIREDATE,
  (2)配置元素和属性。
   默认“<>”表示元素。
   “=” 号表示属性。

二,从Oracle中构建带标记的 XML 文档
 
 SQL/XML 是 SQL 语言标准(ANSI/ISO)的扩展,包含将关系数据转化成 XML 的 XML 发布函数。
 Oracle包含内置的 SQL/XML 发布函数,
 这些函数允许在大型字符对象(CLOB 类型,DB2 UDB 的一种内置数据类型)中创建带标记的 XML 文档。
 可以使用 SELECT 语句装配需要的 XML 节点,然后通过把输出定向到文件而捕捉带标记的 XML 节点。
 也可使用 INSERT 语句将生成的文本插入表中。
 
 这里主要介绍xmlelement函数,xmlforest函数,xmlattributes函数,xmlagg函数

 以下示例使用Oracle的EMPA表(Creat Table EMPA as select * from emp;)
 
 1,xmlelement函数:构造一个命名的 XML 元素节点。XMLELEMENT 是一个标量函数。
  参数包括一个元素名、可选的名称空间声明、可选的属性,以及零个或多个组成元素内容的表达式。
  XMLELEMENT 函数可以嵌套。

  
  (1)指定元素内容
  
  示例1:注意参数的不同表现形式
  select xmlelement(NAME 元素名) from empa; --一个没有内容的元素,一般用于构建枝干元素,嵌套构建叶子元素。
  
  select xmlelement(NAME 元素名, '元素值') from empa;
  
  select xmlelement(NAME ename, ename) from empa;

  select xmlelement(NAME "ename", ename) from empa;
  
  示例2:注意参数的不同表现形式
  select xmlelement(ename, ename) from empa;

  select xmlelement("ename", ename) from empa;

  示例3:
   select xmlelement(NAME emp, --根元素emp
    xmlelement(ename,ename), --子元素ename
    xmlelement(job,job), --子元素job
    xmlelement(comm,comm) --子元素comm
   ) as xml
  from empa;

  (2)构建有属性的元素
  示例:
  select xmlelement(emptab,
    xmlelement(emp,
     xmlattributes(empno AS empno,MGR AS MGR,DEPTNO AS DEPTNO),
     xmlelement(NAME ename,xmlattributes(empno AS no), ename),
     xmlelement(job,job),
     xmlelement(COMM,comm)
    )
   ) as xml
  from empa;

 2,xmlforest函数 :构造一个 XML 元素节点序列(森林)。XMLFOREST 是一个标量函数,

  示例1
  select xmlforest(ENAME "ename", JOB "job",
   to_char(HIREDATE,'yyyy-mm-dd') "hiredate", SAL "sal",COMM "comm")
  from empa;

  示例2:
  select xmlelement(NAME emp,
    xmlattributes(empno as empno,MGR as MGR,DEPTNO as DEPTNO),
    xmlforest(ename as ename,job as job,hiredate as hiredate,sal as sal,comm as comm)
   ) as xml
  from empa;

 3,xmlattributes函数:为 XML 元素节点构造一个或多个 XML 属性节点。XMLATTRIBUTES 是一个标量函数。
  示例1:
  select xmlelement(emp,
   xmlattributes('属性值' AS "属性名")
   ) AS xml
  from empa;

  select xmlelement(emp,
   xmlattributes(empno as empno)
   ) AS xml
  from empa;

  select xmlelement(emp,
   xmlattributes(empno AS "empno")
   ) AS xml
  from empa;

  示例2:
  select xmlelement(emptab,
    xmlelement(emp,
     xmlattributes(empno AS empno,MGR AS MGR,DEPTNO AS DEPTNO),
     xmlelement(NAME ename, xmlattributes(empno AS no),ename),
     xmlelement(job,job),
     xmlelement(COMM,comm)
    )
   ) as xml
  from empa;
 
 4,xmlconcat函数:连接两个或多个 XML 值(XML表达式)。
  示例:
  select xmlelement(NAME emp,
    xmlconcat(
     xmlelement(NAME ename, ename),
     xmlelement(NAME sal, sal)
    )
   ) as xml
  from empa;
  
 5,XMLAGG函数:XMLAGG 函数在生成的 XML 值中将 XML 值聚合为一系列的项。XMLAGG 是一种聚合(列)函数。必须要有group by子句。
  该函数可以用来增强XML树状结构的层次

  示例:
  select xmlelement(NAME emptab,
    xmlelement(NAME emp,
     xmlelement(NAME ename, e.ename),
     xmlelement(comm,e.comm),
     xmlagg(xmlelement(NAME dept,
      xmlattributes(d.deptno AS deptno),xmlelement(NAME dname,d.dname),xmlelement(NAME loc,d.loc))
     )
    )
   )
  from empa  e, dept d
  where e.deptno = d.deptno
  group by e.ename,e.comm;


 6,XMLNAMESPACES函数:从参数中构造 XML 名称空间声明。声明在 XMLELEMENT 和 XMLFOREST 函数生成的元素的作用范围内。

综合示例:


单表示例:
  
  select xmlelement(NAME empTab,
    xmlelement(NAME emp,
     xmlattributes(empno AS empno,MGR AS MGR,DEPTNO AS DEPTNO),
     xmlforest(ename AS ename,job as job,hiredate as hiredate,sal as sal,comm as comm)
    )
   )
  from empa; 


存在主从表关系的示例(Oracle中的dept和emp):将dept表和emp表中的数据生成XML文档输出
  示例1:
  select xmlelement(NAME deptTab,
    xmlattributes(d.deptno AS deptno),
    xmlelement(NAME dname,d.dname),
    xmlelement(NAME loc, d.loc),
    xmlagg(xmlelement(NAME empTab,
      xmlelement(NAME emp,
       xmlattributes(e.empno AS empno,e.MGR AS MGR,e.DEPTNO AS DEPTNO),
       xmlelement(NAME ename,e.ename),
       xmlelement(job,e.job),
       xmlelement(comm,e.comm)
      )
     )
    )
   ).GETSTRINGVAL()  AS XML
  from empa e, dept d
  where e.deptno = d.deptno
  group by d.deptno,d.dname,d.loc;

  示例2:

  select xmlelement(NAME deptTab,
    xmlattributes(d.deptno AS deptno),
    xmlelement(NAME dname, d.dname),
    xmlelement(NAME loc, d.loc),
    xmlelement(NAME empTab,
     xmlelement(NAME emp,
      xmlattributes(e.empno AS empno,e.MGR AS MGR,e.DEPTNO AS DEPTNO),
      xmlelement(NAME ename,e.ename),
      xmlelement(job,e.job),
      xmlelement(comm,e.comm)
     )
    )
   ).GETSTRINGVAL()  AS XML
  from empa e, dept d 
  where e.deptno = d.deptno;

结果如下: 
XML
--------------------------------------------------------------------------------
<DEPTTAB DEPTNO="10"><DNAME>ACCOUNTING</DNAME><LOC>NEW YORK</LOC><EMPTAB><EMP EM
PNO="7782" MGR="7839" DEPTNO="10"><ENAME>CLARK</ENAME><JOB>MANAGER</JOB><COMM></
COMM></EMP></EMPTAB></DEPTTAB>

<DEPTTAB DEPTNO="10"><DNAME>ACCOUNTING</DNAME><LOC>NEW YORK</LOC><EMPTAB><EMP EM
PNO="7839" DEPTNO="10"><ENAME>KING</ENAME><JOB>PRESIDENT</JOB><COMM></COMM></EMP
></EMPTAB></DEPTTAB>

<DEPTTAB DEPTNO="10"><DNAME>ACCOUNTING</DNAME><LOC>NEW YORK</LOC><EMPTAB><EMP EM
PNO="7934" MGR="7782" DEPTNO="10"><ENAME>MILLER</ENAME><JOB>CLERK</JOB><COMM></C
OMM></EMP></EMPTAB></DEPTTAB>

XML
--------------------------------------------------------------------------------

<DEPTTAB DEPTNO="20"><DNAME>RESEARCH</DNAME><LOC>DALLAS</LOC><EMPTAB><EMP EMPNO=
"7369" MGR="7902" DEPTNO="20"><ENAME>SMITH</ENAME><JOB>CLERK</JOB><COMM></COMM><
/EMP></EMPTAB></DEPTTAB>

<DEPTTAB DEPTNO="20"><DNAME>RESEARCH</DNAME><LOC>DALLAS</LOC><EMPTAB><EMP EMPNO=
"7876" MGR="7788" DEPTNO="20"><ENAME>ADAMS</ENAME><JOB>CLERK</JOB><COMM></COMM><
/EMP></EMPTAB></DEPTTAB>

<DEPTTAB DEPTNO="20"><DNAME>RESEARCH</DNAME><LOC>DALLAS</LOC><EMPTAB><EMP EMPNO=
"7902" MGR="7566" DEPTNO="20"><ENAME>FORD</ENAME><JOB>ANALYST</JOB><COMM></COMM>

XML
--------------------------------------------------------------------------------
</EMP></EMPTAB></DEPTTAB>

<DEPTTAB DEPTNO="20"><DNAME>RESEARCH</DNAME><LOC>DALLAS</LOC><EMPTAB><EMP EMPNO=
"7788" MGR="7566" DEPTNO="20"><ENAME>SCOTT</ENAME><JOB>ANALYST</JOB><COMM></COMM
></EMP></EMPTAB></DEPTTAB>

<DEPTTAB DEPTNO="20"><DNAME>RESEARCH</DNAME><LOC>DALLAS</LOC><EMPTAB><EMP EMPNO=
"7566" MGR="7839" DEPTNO="20"><ENAME>JONES</ENAME><JOB>MANAGER</JOB><COMM></COMM
></EMP></EMPTAB></DEPTTAB>

<DEPTTAB DEPTNO="30"><DNAME>SALES</DNAME><LOC>CHICAGO</LOC><EMPTAB><EMP EMPNO="7

XML
--------------------------------------------------------------------------------
499" MGR="7698" DEPTNO="30"><ENAME>ALLEN</ENAME><JOB>SALESMAN</JOB><COMM>300</CO
MM></EMP></EMPTAB></DEPTTAB>

<DEPTTAB DEPTNO="30"><DNAME>SALES</DNAME><LOC>CHICAGO</LOC><EMPTAB><EMP EMPNO="7
698" MGR="7839" DEPTNO="30"><ENAME>BLAKE</ENAME><JOB>MANAGER</JOB><COMM></COMM><
/EMP></EMPTAB></DEPTTAB>

<DEPTTAB DEPTNO="30"><DNAME>SALES</DNAME><LOC>CHICAGO</LOC><EMPTAB><EMP EMPNO="7
654" MGR="7698" DEPTNO="30"><ENAME>MARTIN</ENAME><JOB>SALESMAN</JOB><COMM>1400</
COMM></EMP></EMPTAB></DEPTTAB>


XML
--------------------------------------------------------------------------------
<DEPTTAB DEPTNO="30"><DNAME>SALES</DNAME><LOC>CHICAGO</LOC><EMPTAB><EMP EMPNO="7
900" MGR="7698" DEPTNO="30"><ENAME>JAMES</ENAME><JOB>CLERK</JOB><COMM></COMM></E
MP></EMPTAB></DEPTTAB>

<DEPTTAB DEPTNO="30"><DNAME>SALES</DNAME><LOC>CHICAGO</LOC><EMPTAB><EMP EMPNO="7
844" MGR="7698" DEPTNO="30"><ENAME>TURNER</ENAME><JOB>SALESMAN</JOB><COMM>0</COM
M></EMP></EMPTAB></DEPTTAB>

<DEPTTAB DEPTNO="30"><DNAME>SALES</DNAME><LOC>CHICAGO</LOC><EMPTAB><EMP EMPNO="7
521" MGR="7698" DEPTNO="30"><ENAME>WARD</ENAME><JOB>SALESMAN</JOB><COMM>500</COM
M></EMP></EMPTAB></DEPTTAB>

XML
--------------------------------------------------------------------------------

 


 

你可能感兴趣的:(oracle,数据库,xml,database,文档,insert)