如何解决如何从存储在BLOB类型的列中的XML中提取数据通过SQL查询
我需要以下帮助。 我有一个表,其中的列之一为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本身上使用提取XML,XQuery或XMLTable(在我对其应用lz_uncompress函数之后)? 我还有其他选择吗?
以下是其中一个Blob中经过大量编辑的XML(请注意,我大约有10-15个这样的Worksheet标签)
<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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。