三、插入一些數據
3.1 插入數據
INSERT INTO XML_USER_INFO VALUES (1,'用戶1' ,XMLType('<Phones xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http:www.w3.org/2001/XMLSchema"> <Phone> <Code>13940588000</Code> <Type>移動</Type> </Phone> <Phone> <Code>024-22222222-1</Code> <Type>固定</Type> </Phone> <Phone> <Code>8788888</Code> <Type>未知</Type> </Phone> </Phones>' ) ) /
3.2測試約束有效性(在Type改小靈通)
INSERT INTO XML_USER_INFO VALUES (2,'用戶2' ,XMLType('<Phones xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http:www.w3.org/2001/XMLSchema"> <Phone> <Code>13940588000</Code> <Type>移動</Type> </Phone> <Phone> <Code>13940588000</Code> <Type>固定</Type> </Phone> <Phone> <Code>8788888</Code> <Type>小靈通</Type> </Phone> </Phones>' ) ) -- 返回錯誤:ORA-31038: enumeration 值無效: "小靈通" -- 證明 PhoneType 的 XMLSchema 約束是有效的(廢話); /
….插入我就不多寫了都這模樣
注意:大家可以看出xmltype這裡的數據,就是 Phones 對象XML序列化後的的樣子
也就是說我們可以比較方便把類直接插入數據庫,如果用平面表這裡要執行 1*n次的 insert
代碼例子我就不提供了先,因為太簡單了 XMLType( :XMLString ) 然後給對象序列化了
給到 :XMLString 參數裡就可以了;
3.3 本步驟總結
如果開發的話,可以節省一些語句;尤其適合那種,子表數據一次插入很少的情況
而且用 select 讀取的時候,應該可以直接反序列化為對象
能省去往實體類賦值的代碼量;