甲骨文xmltype是从Oracle 9 i开始支持一种新的数据类型,用于存储和管理xml数据,并提供了很多的功能,用来保存,检索和操作xml文档和管理节点.XMLType是系统定义的类型,所以可以使用它作为一个函数的参数或表或视图中的列的数据类型。也可以创建表和视图的xmltype。当你创建一个表中的一个xmltype列,你可以选择xml数据存储在一个CLOB列,作为二进制xml(内部存储为CLOB),或对象的关系。
下面将介绍甲骨文xmltype的一些基本使用。
1,创建一个包含xmltype类型列的表,并插入测试数据
zx@TEST> create table t1 (id 数字,xml_data sys.xmltype); Table 创建。 zx@TEST> desc  t1 ,名字,,,,,,空吗?类型 ,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -女人,- - - - - - - - - -,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ,身份证号码 ,xml_data sys.xmltype ,zx@TEST> insert  into t1 价值(1 ' abc '); insert into  t1 值(1 ' abc ') ,,,,,,,,,,, ERROR at  line 1: ora - 31011: XML parsing 失败了 ora - 19202: Error occurred 拷贝XML 处理 lpx - 00210: expected “& lt;”, instead of a Error at  line 1 zx@TEST> insert  into t1 值(1’& lt; abc> 1 & lt;/abc>”); 1,row 创建。 zx@TEST> col  xml_data for  a80 zx@TEST> select *,得到t1; ID XML_DATA - - - - - - - - - - -,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ,1 & lt; abc> 1 & lt;/abc>
从上面看的出,XMLType可以做为列中列的数据类型,在插入数据时必须符合XML格式才能插入,否则会报错。
2,查看XMLType的存储形式
从user_segments视图中看出XMLType列是以LOB字段存储的
zx@TEST> select segment_name, segment_type 得到user_segments; segment_name,,,,,, SEGMENT_TYPE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - t1,,,,,,, SYS_IL0000074607C00003 $ $,,,,,, LOBINDEX SYS_LOB0000074607C00003 $ $,,,,,, LOBSEGMENT
查看user_lobs是否对应xml_data列
zx@TEST> col column_name for 故事本来 zx@TEST> col  table_name for 故事本来 zx@TEST> select  table_name、column_name segment_name 得到user_lobs; table_name,,,,,,, column_name,,,,, SEGMENT_NAME - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - T1,,,,,,, SYS_NC00003美元,,,,,,SYS_LOB0000074607C00003 $ $
从上面的查询结果可以看到LOBSEGMENT对应的表T1中的列SYS_NC00003美元,而不是XML_DATA列,而且表T1中没有这个列,再次查询user_tab_cols视图
zx@TEST> col data_type for 故事本来 zx@TEST> select TABLE_NAME COLUMN_NAME、DATA_TYPE HIDDEN_COLUMN, COLUMN_ID 得到user_tab_cols; table_name,,,,,,, column_name,,,,,, DATA_TYPE ,,,,hidden_co column_id - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -,- - - - - - -安康;- - - - - - - - - - - t1,,,,,,,我,,,,,,号码,,,,,NO 1 t1,,,,,,, XML_DATA ,,,,,xmltype,,,,, NO 2 T1,,,,,,, SYS_NC00003美元,,,,,,CLOB,,,,,是的2
从上面的查询中可以看出列SYS_NC00003美元是表T1中的隐藏列,它与列XML_DATA列的COLUMN_ID都是2,说明它们是同一列。由此可以看出XMLType类型的数据由CLOB类型列协助保存。由下面的表定义也可以推断出这一点:
zx@TEST> select dbms_metadata.get_ddl(“表”,T1,用户),得到双; DBMS_METADATA.GET_DDL(“表”,T1,用户) -------------------------------------------------------------------------------- CREATE 才能;TABLE “ZX”。“T1” ,,(“ID”,号码, “XML_DATA”,“SYS”“XMLTYPE”。 ,,),SEGMENT CREATION 立即 PCTFREE 才能;10,PCTUSED 40, INITRANS 1, MAXTRANS 255年,NOCOMPRESS 日志记录 存储(才能INITIAL 65536, NEXT 1048576, MINEXTENTS 1, MAXEXTENT S 2147483645 PCTINCREASE 才能;0,FREELISTS 1, FREELIST GROUPS 1, BUFFER_POOL 违约 ,FLASH_CACHE DEFAULT  CELL_FLASH_CACHE 缺省值) TABLESPACE 才能“用户” ,XMLTYPE COLUMN “XML_DATA”, STORE AS BASICFILE CLOB ( TABLESPACE 才能“用户”,ENABLE STORAGE 拷贝ROW CHUNK 8192年,PCTVER SION 10 null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null初识甲骨文的XMLType