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

更改Oracle 11g中XMLType列的存储选项,oracle,xmltype,Oracle,Xmltype,我在一些oracle数据库表中使用XMLType列。之前(在11.2.0.2中)考虑的默认存储类型是CLOB。因此,如果您对XMLType列发出查询,我可以将该列的内容视为XML字符串。但是,当我删除并重新创建所有表并插入一些数据时,我无法获得XMLType列的内容。它可以简单地在cloumn值中显示XMLType。我怀疑存储类型是否在二进制XML中更改?因此,我发布以下alter声明: ALTER TABLE "MYSCHEMA"."SYSTEMPROP" MODIFY ("XMLCOL

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

ALTER TABLE "MYSCHEMA"."SYSTEMPROP"
   MODIFY ("XMLCOL")
     XMLTYPE COLUMN "XMLCOL" STORE AS CLOB;
请注意,表中已经有一些数据。事件之后,当我删除并插入一行时,内容显示为XMLType。我正在使用SQLDeveloperUI工具。有人能提出解决这个问题的方法吗

编辑:

好的,现在我们决定将XMLType列内容存储为安全文件二进制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;
创建表XMYTYPETEST
(
身份证号码(8)不为空,
视频编号(4)不为空,
用户名VARCHAR2(50),
日期修改时间戳(6),
详细信息XMLType
)XMLTYPE列详细信息存储为SECUREFILE二进制XML;
插入XMYTYPETEST值(10001,1,'XXXX',sysdate,'BLOBTest');
从XMYTYPETEST中选择*;
XMLType列在SQLDeveloper中显示为“SYS.XMLType”。那么,如何获取二进制XML的内容呢

编辑:

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


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

oracle数据库中xmldata的底层存储是CLOB或二进制

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

但是,不管存储是什么,对xmltype列的查询应该会产生一致的结果

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

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

  • 选择xmlquery(..)
  • 选择xmlcast(xmlquery(…)
  • 选择extract()、extractValue()、
以下是提取xml中数据的一些方法


希望这有帮助。

oracle数据库中xmldata的底层存储是CLOB或二进制

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

但是,不管存储是什么,对xmltype列的查询应该会产生一致的结果

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

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

  • 选择xmlquery(..)
  • 选择xmlcast(xmlquery(…)
  • 选择extract()、extractValue()、
以下是提取xml中数据的一些方法


希望这有帮助。

您的问题不清楚,是不是sql developer中的显示问题?您可以运行以下查询:
selectdump()
并发布结果吗?顺便问一下,您是否尝试了
getClobVal()
函数?对使用getClobVal()我可以读取BLOB字段内容。您的问题不清楚,是不是sql developer中的显示问题?您可以运行以下查询:
selectdump()
并发布结果吗?顺便问一下,您是否尝试了
getClobVal()
函数?对使用getClobVal()我可以读取BLOB字段内容。我现在使用getClobVal()函数来检索存储为安全二进制文件的XML内容。但我现在面临着使用大型XML节点检索XML内容的问题。在select查询本身中是否有处理该问题的方法(我使用ORM来执行查询,因此不可能使用PL/SQL)。我现在使用getClobVal()函数来检索存储为安全二进制文件的XML内容。但我现在面临着使用大型XML节点检索XML内容的问题。在select查询本身中是否有处理这种情况的方法(我使用ORM来执行查询,因此不可能使用PL/SQL)。