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)@
需要帮助从 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)@