提问人:Arun 提问时间:10/17/2023 最后编辑:MT0Arun 更新时间:10/17/2023 访问量:36
如何检查存储在 Oracle SQL 中的列值中的未关闭标记
How to check unclosed tags stored in column values in oracle sql
问:
我有一个表,其中一行的列值如下
“SERIS正在开发一种高质量的天空成像系统,用于太阳能资源评估和预测。其中一个关键特征涉及辐照度测量。第一次测试很有希望,平均绝对误差接近 50 W/m<sup>2</sup>。
在这里你可以标记 /sup> 是不完整的,因为它没有起始标记
我想通过sql查询在我的表中找到有多少列具有未关闭的标签
任何解决方案
答:
1赞
MT0
10/17/2023
#1
如果您想确定 XML 是否有效,请使用 XML 解析器。
您可以使用函数来测试对 XML 的解析并捕获任何异常,然后对无效行进行计数:
WITH FUNCTION is_valid_xml(data CLOB) RETURN NUMBER
IS
v_xml XMLTYPE;
BEGIN
v_xml := XMLTYPE('<root>' || data || '</root>');
RETURN 1;
EXCEPTION
WHEN OTHERS THEN
RETURN 0;
END;
SELECT COUNT(*)
FROM table_name
WHERE is_valid_xml(column_name) = 0;
其中,对于示例数据:
CREATE TABLE table_name (column_name) AS
SELECT EMPTY_CLOB() || '<sup>2</sup>' FROM DUAL UNION ALL
SELECT EMPTY_CLOB() || '<sup>2/sup>' FROM DUAL;
输出:
计数(*) |
---|
1 |
您还可以使用以下命令创建存储函数(而不是将其内联声明到查询中):
CREATE FUNCTION is_valid_xml(data CLOB) RETURN NUMBER
IS
v_xml XMLTYPE;
BEGIN
v_xml := XMLTYPE('<root>' || data || '</root>');
RETURN 1;
EXCEPTION
WHEN OTHERS THEN
RETURN 0;
END;
/
评论
0赞
Arun
10/18/2023
嗨,感谢您的回答,但我的要求不是检查 xml 是否有效,事情是按照示例,我想找到具有未关闭标签的标签的列值
0赞
MT0
10/18/2023
@Arun 实际上,它是一样的。想象一下,你有 XML,你可以问是否和有匹配的结束标记(你可能会得到错误的答案,是的,每个都有一个结束标记),或者你可以问它是否是有效的 XML,答案是,不,它不是,因为和结束标签的顺序错误,所以被关闭但没有,然后有一个虚假的结束标签。如果你想正确地解析XML,那么你需要使用XML解析器(不要尝试使用正则表达式)。<A><B></A></B>
A
B
A
B
A
B
A
B
B
评论