在Oracle 11g中更改XMLType列的存储选项

时间:2012-05-24 05:16:42

标签: oracle xmltype

我在我的一些oracle数据库表中使用XMLType列。之前(在11.2.0.2中),考虑的默认存储类型是CLOB。因此,如果您为XMLType列发出查询,我可以将列的内容视为XML字符串。但是当我删除并重新创建所有表并插入一些数据时,我无法获得XMLType列的内容。它简单地在cloumn值中显示XMLType。我怀疑存储类型是否以BINARY XML格式化?所以我发出以下alter语句:

ALTER TABLE "MYSCHEMA"."SYSTEMPROP"
   MODIFY ("XMLCOL")
     XMLTYPE COLUMN "XMLCOL" STORE AS CLOB;

请注意,表格中已有一些数据。在我删除并插入行之后的事件,内容显示为XMLType。我正在使用SQL开发人员UI工具。任何人都可以提出解决此问题的方法吗?

编辑:

好的,现在我们决定将XMLType列内容存储为SECURE FILE BINARY XML。所以我们有这样的表:

CREATE TABLE XMYTYPETEST
(
    ID       NUMBER(8) NOT NULL,
    VID      NUMBER(4) NOT NULL,
    UserName           VARCHAR2(50),
    DateModified       TIMESTAMP(6),
    Details  XMLType
)XMLTYPE COLUMN  Details STORE AS SECUREFILE BINARY XML; 

Insert into XMYTYPETEST values(10001,1,'XXXX',sysdate,'<test><node1>BLOBTest</node1></test>');

Select * from XMYTYPETEST;

XMLType列在sql developer中显示为“SYS.XMLType”。那么如何获取二进制XML的内容呢?

Result of the Query

编辑:

SELECT x.ID,x.Vid,x.details.getCLOBVal()FROM XMYTYPETESTx,其中x.ID = 100000;

上述查询最终为我解决了。

1 个答案:

答案 0 :(得分:1)

oracle数据库中xmldata的底层存储是CLOB或Binary。

默认为11g的二进制存储。

但无论存储如何,您对xmltype列的查询都会产生一致的结果。

&GT;&GT;&GT;&GT;那么如何获取二进制XML的内容呢?

使用查询获取xmltype列内容的方法不会改变。

  • 选择xmlquery(..)
  • 选择xmlcast(xmlquery(...))
  • 选择extract(),extractValue(),...

这些是提取xml中数据的一些方法。

希望这有帮助。