【问题标题】:Get a clob output of a stored procedure over a dblink通过 dblink 获取存储过程的 clob 输出
【发布时间】:2023-02-17 21:24:16
【问题描述】:

我有一个过程可以在几个表上运行查询并将输出操作成它返回的 clob。我需要通过 dblink 在远程数据库中调用此过程并获取该过程返回的 clob 值。我知道我们不能通过 dblink 访问像 clob 这样的非标量数据。我知道如果 clob 在远程端的表中,我可以在本地创建一个全局临时表,然后通过远程表上的选择插入到我的本地临时表中。但就我而言,clob 是该过程的操纵输出。

关于如何执行此操作的任何建议?

【问题讨论】:

    标签: sql database oracle plsql dblink


    【解决方案1】:

    在远程数据库上,创建一个功能环绕过程并返回 CLOB 作为其返回值。然后创建一个看法从这个函数中选择并将 CLOB 作为列公开。您应该能够通过数据库链接通过视图远程查询该 CLOB 列。我知道这可以工作,因为我每天在我编写的实用程序中通过 dblinks 提取 CLOB 数据数千次,尽管我确实记得它需要一些反复试验才能让它满意。

    如果您无法使其正常工作,还有许多其他解决方法可用。一个涉及远程包,该包提供包声明的集合类型,该包中的远程函数可以使用该集合类型将 CLOB 分解为 varchar2(32767) 记录的集合,将该集合返回给调用数据库,然后使用远程引用@ dblink 到该远程包的类型能够从集合内容中重组本地 CLOB。但这种强硬的解决方法确实没有必要。

    最后,我至少应该提一下,将 CLOB 用于结构化数据并不是一个好的设计选择。 CLOB 应该只有非结构化数据,这种数据只对人类有意义(比如日志文件、自由格式的注释、用户输入的描述等)。它永远不应该用于组合程序要解释和使用的多条有意义的结构化数据。还有许多其他结构可以比 CLOB 更好地处理这个问题。

    【讨论】:

      猜你喜欢
      • 2010-11-10
      • 1970-01-01
      • 2018-04-23
      • 2016-03-23
      • 1970-01-01
      • 2019-09-08
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多