2.2 創建表
CREATE TABLE XML_USER_INFO ( NPK integer, USER_NAME NVARCHAR2(50), Phones XMLType, primary key (NPK) ) XMLTYPE COLUMN Phones STORE AS OBJECT RELATIONAL --以對象關系方式建立,而不是二進制 XMLSCHEMA "http://www.OracleDemo.com/Phones.xsd" ELEMENT "Phones" VARRAY Phones.XMLDATA."Phone" STORE AS TABLE XML_USER_INFO_XMLNT01 --將xml中 Phones/Phone 定義為一個數組嵌套表 / -- 返回:成功 -- 這時 Oracle 還會建立一個 XML_USER_INFO_XMLNT01 的【嵌套表】
我建立了一個叫 XML_USER_INFO 的表,這個東西假設為一個用戶信息表(真正的用戶信息不可能這麼少列的)
Oracle 建立XMLType 時可以指定以二進制或對象關系方式建立XML 類型,
我這裡選擇STORE AS OBJECT RELATIONAL 據說可以提高性能,等待考證
下一面我要給 Phones/Phone 下加一些約束所以將 Phone 定義為一個數組嵌套表;說白了就是定義一個表裡面都放置 Phone 類型
2.3 定義約束
ALTER TABLE XML_USER_INFO_XMLNT01 ADD constraint PK_XML_USER_INFO_XMLNT01 primary key (NESTED_TABLE_ID, "Code")
就是每個人的電話號碼不能重復; 數據庫裡的東西要是沒有約束是很郁悶的,這裡也試驗一下這個問題;
constraint PK_XML_USER_INFO_XMLNT01 可以省略,因為有名字比較容易從異常中看出到底是什麼列出錯,我一般都會加上這個
除非一個表就一個主鍵;
遺憾的是集合類型的元素、不能加外鍵(就是說如果是 Phones 的屬性是可以加外鍵的 Phone屬性,如電話號碼,類型什麼的就不行,必須和數據庫表一行能對應上的才可以加外鍵否則只能用 schema 約束);
外鍵的例子以後在說吧;
2.4 本步驟總結
比較滿意、雖然sql 代碼很多不過,schema 是類生成的、能夠節省一些設計時間,不過學習成本是必須的;
XMLType 的 schema 並不是必須的,不過沒有約束,關系對數據庫來說,時間長了是不好維護的尤其是後來人;