如何从存储在 BLOB 类型的列中的 XML 中提取数据(通过 SQL 查询)
How to extract data (via SQL query) from XML stored in a column as type BLOB
我需要以下方面的帮助。
我有一个 table,其中一列为 BLOB 类型。执行以下查询允许我在 Oracle SQL 开发人员的文本编辑器中读取 BLOB,如下图所示:
select
utl_raw.cast_to_varchar2(utl_compress.lz_uncompress(a.DATA))
from my_table a where a.id = 11266392;
我可以双击上面的阴影单元格并以文本形式阅读。这很好,但它一次只适用于一行。我的实际目标是从每个 BLOB 读取 xml 标签内的特定数据,每个月大约有一百万个这样的数据。
我想我可以将其转换成一个字符串并读取前 4000 个字符,但这是无用的,因为我的每条记录的 BLOB 的长度为 400K(使用 dbms_lob 中的 getlength 过程)。
我尝试通过这个
在 XML 中投射 blob
select CONVERT(xml,a.data, 2) from
(select utl_compress.lz_uncompress(a.DATA) as data from my_table a where a.id = 11266392) a;
但这引发了一个错误:
ORA-00904: "XML": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 10 Column: 16
我的问题是,有没有一种方法可以在 blob 本身上使用 extract XML、XQuery 或 XMLTable(在我对其应用 lz_uncompress 函数之后)?
我的其他选择是什么?
这是其中一个 blob 中经过大量编辑的 XML(请注意,我有大约 10-15 个这样的工作表标签)
<Worksheets>
<Worksheet Description="Some Coverage" EffectiveDate="2020-06-28T00:01:00-05:00" ExpirationDate="2021-06-28T00:01:00-05:00" FixedId="Table:13263928">
<Routine RateBookCode="XX" RateBookEdition="00006" RoutineCode="XXX" RoutineVersion="1">
<Store Declaration="true" Result="false" ResultType="java.lang.Boolean" Variable="hasSpecialLimits">
<PropertyGet ObjectName="XXX" ObjectType="XXX" ObjectValue="My Address" PropertyName="HasSpecialLimits" Type="XXXXX" Value="false" ValueType="java.lang.Boolean"/>
</Store>
</Routine>
</Worksheet>
</Worksheets>
它应该像这样工作:
SELECT XMLTYPE( a.data, 2 )
FROM ( select utl_compress.lz_uncompress(a.DATA) as data
from my_table a where a.id = 11266392 ) a;
我需要以下方面的帮助。 我有一个 table,其中一列为 BLOB 类型。执行以下查询允许我在 Oracle SQL 开发人员的文本编辑器中读取 BLOB,如下图所示:
select
utl_raw.cast_to_varchar2(utl_compress.lz_uncompress(a.DATA))
from my_table a where a.id = 11266392;
我可以双击上面的阴影单元格并以文本形式阅读。这很好,但它一次只适用于一行。我的实际目标是从每个 BLOB 读取 xml 标签内的特定数据,每个月大约有一百万个这样的数据。
我想我可以将其转换成一个字符串并读取前 4000 个字符,但这是无用的,因为我的每条记录的 BLOB 的长度为 400K(使用 dbms_lob 中的 getlength 过程)。
我尝试通过这个
在 XML 中投射 blobselect CONVERT(xml,a.data, 2) from
(select utl_compress.lz_uncompress(a.DATA) as data from my_table a where a.id = 11266392) a;
但这引发了一个错误:
ORA-00904: "XML": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 10 Column: 16
我的问题是,有没有一种方法可以在 blob 本身上使用 extract XML、XQuery 或 XMLTable(在我对其应用 lz_uncompress 函数之后)? 我的其他选择是什么?
这是其中一个 blob 中经过大量编辑的 XML(请注意,我有大约 10-15 个这样的工作表标签)
<Worksheets>
<Worksheet Description="Some Coverage" EffectiveDate="2020-06-28T00:01:00-05:00" ExpirationDate="2021-06-28T00:01:00-05:00" FixedId="Table:13263928">
<Routine RateBookCode="XX" RateBookEdition="00006" RoutineCode="XXX" RoutineVersion="1">
<Store Declaration="true" Result="false" ResultType="java.lang.Boolean" Variable="hasSpecialLimits">
<PropertyGet ObjectName="XXX" ObjectType="XXX" ObjectValue="My Address" PropertyName="HasSpecialLimits" Type="XXXXX" Value="false" ValueType="java.lang.Boolean"/>
</Store>
</Routine>
</Worksheet>
</Worksheets>
它应该像这样工作:
SELECT XMLTYPE( a.data, 2 )
FROM ( select utl_compress.lz_uncompress(a.DATA) as data
from my_table a where a.id = 11266392 ) a;