【发布时间】:2016-04-19 14:36:13
【问题描述】:
我必须更新存储在 Oracle 11G 中 BLOB 列中的 XML 值。 BLOB 存储了一个完整的 XML 文件,我必须在其中更新一些值并将其另存为 BLOB。如何通过 blob 转换和 XMLQUERY 和 XMLUPDATE 轻松选择和更新数据?任何代码示例?
提前谢谢你。
这里有更多细节:
这是表的ddl:
CREATE TABLE MAPSHEET
(
MAPSHEETID NUMBER (14,0) NOT NULL,
NAME VARCHAR2 (64) NOT NULL,
STRUCTURE BLOB,
)
blob col STRUCTURE 中的 xml 数据
<MapSheet Version="1.0">
<Frame>
<JobId>9022165</JobId>
<LayoutId>24807064</LayoutId>
<Blocks>
<Block MapFieldMask="true" CompressText="false" CombineRaster="false">
<Name>layout</Name>
<StyleId>24808857</StyleId>
<LayoutLayers>0 1</LayoutLayers>
<BlockScale/>
<JobItemIds/>
</Block>
<Block MapFieldMask="true" CompressText="false" CombineRaster="false">
<Name>karto</Name>
<StyleId>24809031</StyleId>
<LayoutLayers>4</LayoutLayers>
<BlockScale/>
<JobItemIds>
<JobItemId>9083675</JobItemId>
<JobItemId>9088148</JobItemId>
</JobItemIds>
</Block>
<Block MapFieldMask="true" CompressText="false" CombineRaster="false">
<Name>hel</Name>
<StyleId>24809032</StyleId>
<LayoutLayers>-</LayoutLayers>
<BlockScale/>
<JobItemIds>
<JobItemId>9022173</JobItemId>
<JobItemId>25403646</JobItemId>
</JobItemIds>
</Block><Block MapFieldMask="true" CompressText="false" CombineRaster="false">
<Name>shade glacier</Name>
<StyleId>24809041</StyleId>
<LayoutLayers>-</LayoutLayers>
<BlockScale/>
<JobItemIds>
<JobItemId>24806040</JobItemId>
</JobItemIds>
</Block>
<Block MapFieldMask="true" CompressText="false" CombineRaster="false">
<Name>shade</Name>
<StyleId>24809040</StyleId>
<LayoutLayers>-</LayoutLayers>
<BlockScale/>
<JobItemIds>
<JobItemId>24806038</JobItemId>
</JobItemIds>
</Block>
</Blocks>
<Offset X="0" Y="0"/>
<Name>DS</Name>
</Frame></MapSheet>
这个简单的 SELECT 获取数据不起作用:
SELECT x.MapSheet
FROM XmlTable('/MapSheet') PASSING XmlType(MAPSHEET.STRUCTURE,1)
COLUMS "XML" VARCHAR2(300) PATH 'MapSheet') AS x;
如何从 blob 列中选择/更新所需的 xml 数据?
【问题讨论】: