首页 > 解决方案 > 在 Oracle SQL 表中转换和验证 XMLType 需要帮助

问题描述

所以这里的场景是数据来自外部系统到 oracle 数据库。我需要将 CLOB 数据类型转换为 XMLTYPE 并验证表中的 XMLTYPE 字段。如果验证或转换失败,我需要将此记录推送到另一个表中。我怎样才能做到这一点。

我尝试使用 XMLTYPE 函数和 XMLISVALID 函数,但我不断收到错误。

标签: sqlxmloracleplsqloracle-sqldeveloper

解决方案


你可以使用WITH FUNCTION

CREATE TABLE t(id INT, x CLOB);
INSERT INTO t(id, x) VALUES(1, '<root/>');
INSERT INTO t(id, x) VALUES(2, '<root></root>');
INSERT INTO t(id, x) VALUES(3, '<root><a></root>'); -- incorrect XML

检查列的内容是否是有效的 XML:

WITH FUNCTION func(col CLOB) RETURN NUMBER
AS
  x XMLTYPE;
BEGIN
   x := XMLTYPE(col);
   RETURN 1;

   EXCEPTION WHEN OTHERS THEN
   RETURN 0;
END;
SELECT *
FROM t
WHERE func(x) = 1;  -- get only valid XML
-- WHERE func(x) = 0; -- get invalid XML

db<>小提琴演示


推荐阅读