包含XML的拆分Clob

时间:2019-04-10 20:06:10

标签: sql regex xml oracle plsql

我有一个表,该表的clob列中包含一个像这样的值:<root><node><a>text1a</a><b>text1b</b></node><node><a>text2a</a><b>text2b</b></node></root>

使用PL / SQL,我需要对其进行查询并分两行获取此输出:

<node><a>text1a</a><b>text1b</b></node>
<node><a>text2a</a><b>text2b</b></node>

每个可能超过4000个字符。 标签必须包含在输出中。

2 个答案:

答案 0 :(得分:2)

将clob转换为xmltype并使用xmltable对其进行解析:

DECLARE @Vars TABLE([ID] NOT NULL IDENTITY, [Var] NVARCHAR(MAX))
/*
INSERT Values to @Vars
*/
DECLARE @ID INT, @Var NVARCHAR(MAX)
WHILE EXISTS (SELECT 1 FROM @Vars)
BEGIN
    SELECT TOP 1 @ID = [ID], @Var = [Var] FROM @Vars ORDER BY [ID]

    INSERT TableA
    EXEC(@Var)

    DELETE @Vars WHERE [ID] = @ID
END

答案 1 :(得分:-1)

原始数据不在varchar中;它在某些LOB中。如果可以返回2个lob,可以查找PLSQL表函数(将函数放入from子句中),并利用dbms_lob包返回2行,其中每行也是一个LOB。

如果要将其作为varchar数据返回,则限制为4000。您所要做的就是在4000行中返回多行,并将它们全部合并到客户端软件中。

您可以在此链接中看到将blob拆分为4000字节字符串的解决方案。 https://medium.com/@thesaadahmad/a-blobs-journey-from-the-database-to-the-browser-98884261e137