DB2 SQL - 在 case 语句中使用 XMLCAST(XMLQUERY (Xpath) 函数过滤非 xml、无效 xml 数据

DB2 SQL - Filter non-xml, invalid xml data using XMLCAST(XMLQUERY (Xpath) function in case statement

需要帮助从 blob 格式的列中过滤不良 xml 数据。使用下面的查询来实现这个并面临下面的错误。

查询: SELECT COLUMN1 AS NAME, CASE WHEN COLUMN2 = '' THEN XMLCAST( XMLQUERY( '$file/*:value' PASSING XMLPARSE( DOCUMENT TABLE."DATA" ) AS "file" ) AS VARCHAR(10)) ELSE COLUMN2 END AS INFO FROM TABLE

错误: [代码:-16110,SQL 状态:2200M] XML 语法错误。预计会找到“评论或 PI”。SQLCODE=-16110,SQLSTATE=2200M,DRIVER=4.22.29

Db2 中没有“安全的”XMLPARSE 函数,但您可以创建它。

--#SET TERMINATOR @

-- Returns NULL on bad document
CREATE FUNCTION XMLPARSE_SAFE (P_DOC CLOB (1M))
RETURNS XML
CONTAINS SQL
DETERMINISTIC
NO EXTERNAL ACTION
BEGIN
    DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN END;
    RETURN XMLPARSE (DOCUMENT P_DOC);
END@

-- Usage
SELECT S, XMLPARSE_SAFE (S) AS DOC
FROM 
(
VALUES
  '<value>Not Eligible</value>'
, '<value>Not Eligible</alue>'
) T (S)@