如何操作 XML 数据_XMLTYPE 与 EXTRACT 函数解析节点

Oracle中EXTRACT返回空因XPath 1.0限制、命名空间未声明、未调用getStringVal();推荐改用XMLTABLE,它支持XPath 2.0、统一声明命名空间、天然返回SQL类型值。Oracle 里用 EXTRACT 解析 XMLTYPE 为啥总返回空?因为 extract 在 oracle 10g/11g 中默认只支持 xpath 1.0,且对命名空间、根节点层级、数据类型敏感------不是写对路径就能出结果。必须显式声明命名空间(哪怕文档没声明),否则 EXTRACT 直接忽略匹配节点XMLTYPE 字符串若以 <?xml version="1.0"?> 开头,但没指定编码,某些版本会解析失败,建议用 XMLTYPE.createXML() 构造而非直接字符串转返回值是 XMLTYPE,不是字符串,想取文本得链式调用 .getStringVal(),漏掉这步就看到空或 NULL示例:SELECT EXTRACT(xml_col, '/root/item/name/text()', 'xmlns="http://example.com"')<br> .getStringVal() AS name_val<br>FROM my_table;替换 EXTRACT:为什么现在更推荐用 XMLTABLEEXTRACT 在 Oracle 12c+ 已被标记为"deprecated",官方明确建议迁移到 XMLTABLE------它支持完整 XPath 2.0、能同时提取多个字段、天然处理命名空间,且性能更稳定。XMLTABLE 把 XML 当作虚拟表查,避免嵌套 EXTRACT + getStringVal() 的冗余链式调用命名空间用 XMLNAMESPACES() 一次性声明,不用在每个路径里重复写遇到空节点不会报错,而是返回 NULL,和 SQL 行为一致,便于后续 NVL 或过滤示例:SELECT x.name, x.price<br>FROM my_table,<br> XMLTABLE(XMLNAMESPACES('http://example.com' AS "ns"),<br> '/ns:root/ns:item'<br> PASSING xml_col<br> COLUMNS name VARCHAR2(50) PATH 'ns:name',<br> price NUMBER PATH 'ns:price') x;XMLTYPE 存储选 CLOB 还是 BINARY XML?取决于查询频率和更新模式。不是越大越好,也不是越小越快。 Trenz AI驱动的社交电商营销平台,专为TikTok Shop设计

相关推荐
captain3763 分钟前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
wflynn16 分钟前
GitHub 今日推荐|Edge0:让大号 MoE 模型在一台 Mac 上流式跑起来
python·开源·github
心中有你021425 分钟前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
2601_9679801134 分钟前
python之用scapy分层解析pcap报文(Ethernet帧、IP数据包、TCP数据包、UDP数据包、Raw数据包)
python·scapy·pcap·协议分析·网络数据包
龙亘川39 分钟前
综合素质评价业务建模:从过程性评价到成长档案全链路闭环
数据库·智慧城市·数据可视化
心疼你的一切41 分钟前
Python自动发邮件实战定时发报表
大数据·开发语言·python
数据库小组1 小时前
NineData 实战教程:MySQL 5.5 数据迁移同步到 MySQL 8.0(跨版本升级)
数据库·mysql·mysql优化·数据库开发·数据库迁移·版本升级·数据复制
zhangjw341 小时前
1-5 PostgreSQL 数据类型全集:基础类型、字符串、数值、时间类型
数据库·postgresql
王中阳Go2 小时前
5.27 分钟干完后端和全部测试:一场三小时笔试的五个失分点,四个不在代码上
大数据·数据库·人工智能·后端·大语言模型
cnskylee2 小时前
【MySQL】麒麟V10 SP3系统安装MySQL-Commercial-8.0.46
数据库·mysql·adb