2008年7月30日 星期三

Create XML from Real Table using Oracle10g

--建立一個實體table

SQL> CREATE TABLE TBLAREA
 2 (
 3  AREAID INTEGER,
 4  AREA_ENAME VARCHAR2(32),
 5  AREA_CNAME VARCHAR2(32)
 6 );

已建立表格.

--借用上一篇diary使用的XML Table及語法新增資料

SQL> INSERT INTO TBLAREA
 2 SELECT extractvalue(xseq.column_value,'/THISROW/AREAID') as AREAID,
 3     extractvalue(xseq.column_value,'/THISROW/AREA_ENAME') as AREA_ENAME,
 4     extractvalue(xseq.column_value,'/THISROW/AREA_CNAME') as AREA_CNAME
 5 from AREA d,TABLE(XMLSEQUENCE(extract(value(d),'/ROWSET/THISROW'))) xseq;

已建立 6 個資料列.

SQL> commit;

確認完成.

SQL> SELECT * FROM TBLAREA;

 AREAID AREA_ENAME     AREA_CNAME
 ------- ----------------- ------------------------------
    1 Africa       非洲
    2 America      美洲
    3 Asia        亞洲
    4 Europe       歐洲
    5 Middle Eas     中東
    6 Oceania       大洋洲

已選取 6 個資料列.


--運用XMLQuery將TBLAREA實體Table資料讀出來組成xml格式
--再使用dbms_xdb.createresource將xml存入XML DB的repository去


DECLARE
    XMLdoc XMLType;
    res boolean;
BEGIN
 SELECT XMLQuery(
  'for $j in 1 return (
  < AREAS > {
   for $i in ora:view("TBLAREA")/ROW
   return (< ROW >
        < AREAID >{xs:integer($i/AREAID)}< /AREAID >
        < AREA_ENAME >{xs:string($i/AREA_ENAME)}< /AREA_ENAME >
        < AREA_CNAME >{xs:string($i/AREA_CNAME)}< /AREA_CNAME >
       < /ROW >)} < /AREAS >)'
returning content) into XMLdoc
from dual;

res:= DBMS_XDB.CREATERESOURCE('/public/orion/xml/Table2XML.XML',XMLdoc);

commit;

END;
/

--將上述sql存成.sql: table2xml.sql

SQL> @c:\table2xml.sql

已順利完成 PL/SQL 程序.

--開啟Browser看看xml是否進到repository去



--點選Table2XML.XML看內容


SQL> select xmlquery('for $i in fn:doc("/public/orion/xml/Table2XML.XML")
 2 return $i' RETURNING CONTENT) AS RESULT FROM DUAL;

RESULT
-------------------------------------------------------------------------------------
< AREAS >< ROW > < AREAID >1< /AREAID >< AREA_ENAME >Africa< /AREA_ENAME >< AREA_CNAME >非洲< /AREA_CNAME >< /ROW >< ROW >< AREAID >2< /AREAID >< AREA_ENAME >America< /AREA_ENAME >< AREA_CNAME >美洲< /AREA_CNAME >< /ROW >< ROW >< AREAID >3
< /AREAID >< AREA_ENAME >Asia< /AREA_ENAME >< AREA_CNAME >亞洲< /AREA_CNAME >< /ROW >< ROW >< AREAID >4< /AREAID >< AREA_ENAME >Europe< /AREA_ENAME >< AREA_CNAME >歐洲< /AREA_CNAME >< /ROW >< ROW >< AREAID >5< /AREAID >< AREA_ENAME >Middle East< /AREA_ENAME >< AREA_CNAME >中東< /AREA_CNAME >< /ROW >< ROW >< AREAID >6< /AREAID >< AREA_ENAME >Oceania< /AREA_ENAME >< AREA_CNAME >大洋洲 < /AREA_CNAME >< /ROW >< /AREAS >