初识甲骨文的XMLType

  

甲骨文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