如何检查oracle sql中存储在列值中的未关闭标记

lg40wkob  于 7个月前  发布在  Oracle
关注(0)|答案(1)|浏览(78)

我有一个表,其中一行的列值如下所示
SERIS正在开发一种高质量的天空成像系统,用于太阳资源评估和预测。其中一个关键功能是辐照度测量。第一次测试很有希望,平均绝对误差接近50 W/m2。
在这里你可以标记/sup>是不完整的,因为它没有开始标记
我想通过SQL查询在我的表中找到有多少列有未关闭的标记
任何解决方案

w1e3prcc

w1e3prcc1#

如果你想知道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;
/


fiddle

相关问题