【问题标题】:Split Clob containing XML包含 XML 的拆分 Clob
【发布时间】:2019-09-01 09:12:37
【问题描述】:

我有一个表,在 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 个字符。 标签必须包含在输出中。

【问题讨论】:

    标签: sql regex xml oracle plsql


    【解决方案1】:

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

    with s as (select '<root><node><a>text1a</a><b>text1b</b></node><node><a>text2a</a><b>text2b</b></node></root>' c from dual)
    select x.node node_xml, x.node.getclobval() node_clob
    from s,
    xmltable(
    '/root/node'
    passing xmltype(s.c)
    columns
    node xmltype path '.'
    ) x;
    
    NODE_XML                                   NODE_CLOB                                 
    ------------------------------------------ ------------------------------------------
    <node><a>text1a</a><b>text1b</b></node>    <node><a>text1a</a><b>text1b</b></node>   
    <node><a>text2a</a><b>text2b</b></node>    <node><a>text2a</a><b>text2b</b></node>
    

    【讨论】:

      【解决方案2】:

      原始数据不在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

      【讨论】:

      • dbms_lob 包 - 我想我在 from 子句中引用了那个和那个 plsql 函数。我不会在这里再次剪切/粘贴代码。我有时想知道人们是否通过“downvotes”获得报酬!无论如何,有趣的是人们不阅读答案或问题,而是坚持提供他们的意见。一定是某个地方的一些秘密的stackoverflow会议......
      • 我需要返回一个 clob。我在 DBMS_LOB.SUBSTR 中读取的数量参数不能超过 32767。而每个节点我冷的时间更长。我想也许 RegExpr 可以解决,但我不确定。
      • 您实际上只有两个选择 a) 使用 dbms_lob substr 并将其转换回 lob 并返回给您的客户端。您的客户需要能够处理它。但是,如果您的客户可以处理它,为什么要 dbms_lob 呢?只需返回大字符串并在客户端解析 b) 从 4000 的 DB 中返回多行,每行带有一个 seqnum。现在您的客户只看到 varchar 但需要知道它需要读取多行并在其一侧连接。该链接提供后一种选择。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 2016-06-12
      • 2012-09-29
      • 2019-06-03
      相关资源
      最近更新 更多