【发布时间】:2017-10-02 20:07:04
【问题描述】:
我通过 UPDATEXML 函数的 Oracle 文档页面完成了该示例: https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions205.htm
现在,我正在尝试将其应用于我的数据库中的数据。我的数据库中的列是CLOB(用于多个事物),所以我需要在执行xml相关操作之前将我的数据转换为xmltype。但是,我的尝试返回以下错误SQL Error: ORA-00927: missing equal sign。
有没有办法在不修改列数据类型的情况下更新clob存储的xml?
尝试
在我的数据库的数据类型中重复使用 Oracle 示例。
1。创建表
CREATE TABLE xwarehouses
(
MSD_ID INTEGER,
CDATA CLOB
);
2。添加数据
INSERT INTO xwarehouses VALUES
(1,
('<?xml version="1.0"?>
<Warehouse>
<WarehouseId>1</WarehouseId>
<WarehouseName>Southlake, Texas</WarehouseName>
<Building>Owned</Building>
<Area>25000</Area>
<Docks>2</Docks>
<DockType>Rear load</DockType>
<WaterAccess>true</WaterAccess>
<RailAccess>N</RailAccess>
<Parking>Street</Parking>
<VClearance>10</VClearance>
</Warehouse>'));
3.将 CLOB 转换为 XMLTYPE 以从指定标签中提取值
SELECT EXTRACTVALUE(XMLTYPE(cdata),'/Warehouse/WaterAccess') as VAL from xwarehouses;
VAL | true
4.尝试在 UPDATE 中使用相同的转换来更新值
update XWAREHOUSES
set XMLTYPE(cdata) =
updatexml(XMLTYPE(cdata),'/Warehouse/WaterAccess/text()','false')
where msd_id = 1;
**5。这将返回错误:
SQL Error: ORA-00927: missing equal sign
【问题讨论】:
-
我认为 set XMLTYPE(cdata) = 应该设置为 cdata = 并假设集合的右侧将隐式转换为 CLOB。试一试,让我知道。
-
PL/SQL 也是一个可以考虑的选项吗?
-
如果我在 SET 中删除 XMLTYPE,但将其保留在 XMLUPDATE 中,我会得到
SQL Error: ORA-00932: inconsistent datatypes: expected CLOB got - 00932. 00000 - "inconsistent datatypes: expected %s got %s"。 -
如果我删除两边的 XMLTYPE 我得到:
SQL Error: ORA-00932: inconsistent datatypes: expected - got - 00932. 00000 - "inconsistent datatypes: expected %s got %s" -
您的意思是在这里编写某种形式的存储过程不是直接更新的选项吗?