oracle - 列中的 XML 数据类型以查找现有值
问题描述
我在查找数据类型为 XMLType 的表中的行时遇到问题,我正在寻找名称“PrimeSub”和值“Y”。谢谢
<attributes>
<upper_lvl_ver_desc>
<Name>AABB</Name>
<Description>pkListValue</Description>
<Value/>
</upper_lvl_ver_desc>
<upper_lvl_ver_desc>
<Name>GL_PS_ALLOWED</Name>
<Description>pkListValue</Description>
<Value/>
</upper_lvl_ver_desc>
<upper_lvl_ver_desc>
<Name>PrimeSub</Name>
<Description>pkListValue</Description>
<Value>Y</Value>
</upper_lvl_ver_desc>
</attributes>
解决方案
你没有发布你的表名或结构,所以我在这里使用mytable
作为表名和xmlcol
xmltype 列。顶部的 WITH 子句只是提供测试数据。
with mytable as (select xmltype('<attributes>
<upper_lvl_ver_desc>
<Name>AABB</Name>
<Description>pkListValue</Description>
<Value/>
</upper_lvl_ver_desc>
<upper_lvl_ver_desc>
<Name>GL_PS_ALLOWED</Name>
<Description>pkListValue</Description>
<Value/>
</upper_lvl_ver_desc>
<upper_lvl_ver_desc>
<Name>PrimeSub</Name>
<Description>pkListValue</Description>
<Value>Y</Value>
</upper_lvl_ver_desc>
</attributes>') as xmlcol from dual)
-- query starts here
select xmlcol
from mytable
inner join XMLTable('/attributes/upper_lvl_ver_desc' PASSING mytable.xmlcol
COLUMNS c_name varchar2(50) PATH 'Name',
c_value varchar2(1) PATH 'Value') atts
on c_name = 'PrimeSub' and c_value = 'Y'
;
这种方法可能看起来有点违反直觉,但这是 Oracle 推荐的一种方法。您使用 XMLTable 函数将 XML 列连接为伪表,将其转换为可以在 SQL 中轻松操作的关系数据。你可以在这里阅读更多关于它的信息。
推荐阅读
- python - 从 WinPython 获取用户主目录的路径
- java - 谁能解释下面的for循环发生了什么?
- python - Python Tkinter:不使用 IDLE 时图像质量下降
- feathersjs - 我想让feathersjs在127.0.0.1(而不是0.0.0.0)上监听
- node.js - 如何使用节点 js ejs 在 mongodb 集合中显示选定的复选框
- python - 在字典Python中搜索值的一部分
- reactjs - 如何在firebase数据库实时反应中单击按钮时更新特定节点中的客户端状态
- spring-mvc - 从支付网关成功重定向后,用户在 Spring Boot 中注销
- java - 游标计数为零尽管数据存在于带有 Android 的 SQLite 中
- excel - 有没有办法在空格前组合 2 个字符?