1

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

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 的内容呢?

查询结果

编辑:

从 XMYTYPETESTx 中选择 x.ID、x.Vid、x.details.getCLOBVal(),其中 x.ID=100000;

上面的查询最终对我有用。

4

1 回答 1

1

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

它在 11g 中默认为二进制存储。

但不管存储如何,您对 xmltype 列的查询应该会产生一致的结果。

>>>> 那么如何获取二进制 XML 的内容呢?

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

  • 选择 xmlquery(..)
  • 选择 xmlcast(xmlquery(...))
  • 选择提取(),提取值(),...

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

希望这可以帮助。

于 2012-05-30T11:47:38.833 回答