/*
1) 在 xsd 裡 xdb:defaultTable 直接建立 table
2) 使用 UpdateXML 更新指定的 node
*/
-- region.xsd內容如下:
< ?xml version="1.0"? >
< xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xdb="http://xmlns.oracle.com/xdb" xdb:storeVarrayAsTable="true" >
< xs:element name="ROWSET" type="ROWSET_TYPE" xdb:defaultTable="REGIONS" / >
< xs:complexType name="ROWSET_TYPE" xdb:SQLType="REGION_OT" xdb:maintainDOM="false" >
< xs:sequence >
< xs:element name="REGION" type="REGION_TYPE" xdb:SQLCollType="REGION_ROW_NTT" minOccurs="0" maxOccurs="unbounded" xdb:maintainOrder="false"/ >
< /xs:sequence >
< /xs:complexType >
< xs:complexType name="REGION_TYPE" xdb:SQLType="REGION_ROW_OT" xdb:maintainDOM="false" >
< xs:sequence >
< xs:element name="REGNAME" type="xs:string"/ >
< /xs:sequence >
< xs:attribute name="id" type="xs:string"/ >
< /xs:complexType >
< /xs:schema >
-- CREATE RESOURCE / REGISTER SCHEMA
SQL> declare
2 res boolean;
3 begin
4 res:=dbms_xdb.createresource('/public/orion/xsd/region.xsd',getDocument('region.xsd'));
5 commit;
6 end;
7 /
已順利完成 PL/SQL 程序.
SQL> exec dbms_xmlschema.registerschema('http://localhost:8080/public/orion/xsd/region.xsd',getDocument('region.xsd'));
已順利完成 PL/SQL 程序.
SQL> desc regions;
名稱 空值? 類型
----------------------------------------------------- -------- ------------------------------------
TABLE of SYS.XMLTYPE(XMLSchema "http://localhost:8080/public/orion/xsd/region.xsd" Element "ROWSET") STORAGE Object-relational TYPE "REGION_OT"
-- region.xml內容如下:
< ?xml version="1.0" encoding="UTF-8" ? >
< ROWSET xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://localhost:8080/public/orion/xsd/region.xsd" >
< REGION id="1" >< REGNAME >Northern< /REGNAME >< /REGION >
< REGION id="2" >< REGNAME >Southern< /REGNAME >< /REGION >
< /ROWSET >
-- CREATE RESOURCE
SQL> declare
2 res boolean;
3 begin
4 res:=dbms_xdb.createresource('/public/orion/xml/region.xml',getDocument('region.xml'));
5 commit;
6 end;
7 /
已順利完成 PL/SQL 程序.
-- 看新增結果
SQL> SELECT * FROM REGIONS X;
SYS_NC_ROWINFO$
--------------------------------------------------------
< ?xml version="1.0" encoding="BIG5"? >
< ROWSET >
< REGION id="1" >
< REGNAME >Northern< /REGNAME >
< /REGION >
< REGION id="2" >
< REGNAME >Southern< /REGNAME >
< /REGION >
< /ROWSET >
-- 將Northern更新為Central
SQL> update regions
2 set object_value = updatexml(object_value,'/ROWSET/REGION[1]/REGNAME/text()','Central')
3 where existsnode(object_value,'/ROWSET/REGION[1]') = 1;
已更新 1 個資料列.
SQL> commit;
確認完成.
SQL> select * from regions;
SYS_NC_ROWINFO$
------------------------------------------------------
< ?xml version="1.0" encoding="BIG5"? >
< ROWSET >
< REGION id="1" >
< REGNAME >Central< /REGNAME >
< /REGION >
< REGION id="2" >
< REGNAME >Southern< /REGNAME >
< /REGION >
< /ROWSET >