【问题标题】:Query remote oracle CLOB data from MSSQL从 MSSQL 查询远程 oracle CLOB 数据
【发布时间】:2019-07-25 22:00:34
【问题描述】:

我阅读了有关此问题的不同帖子,但对我的问题没有帮助。 我在本地数据库(Microsoft SQL Server)上并在远程数据库(ORACLE)上查询数据。 在这个数据中,有一个CLOB类型。

CLOB 类型列仅显示 7 个正确数据,其他数据显示 <null>

我试过CAST(DEQ_COMMENTAIRE_REFUS_IMPORT AS VARCHAR(4000))

我试过SUBSTRING(DEQ_COMMENTAIRE_REFUS_IMPORT, 4000, 1)

你能帮帮我吗?

谢谢

【问题讨论】:

    标签: sql sql-server oracle varchar clob


    【解决方案1】:

    没有 MSSQL,但在我的例子中,我们使用 Oracle 的 ODBC Connect 引擎将数据拉入 MariaDB。

    对于 CLOB,我们做了以下(大致):

    1. 创建 PLSQL 函数 get_clob_chunk (clobin CLOB, chunkno NUMBER) RETURN VARCHAR2。

    这将为 CLOB 返回指定的第 n 个 1000 个字符的块。

    我们发现 1,000 最适用于多字节数据。如果数据都是纯文本单字节,那么 4,000 块是安全的。

    抱歉没有实际代码,因为我有点赶时间。

    1. 创建一个调用 get_clob_chunk 函数的 Oracle VIEW,将 CLOB 拆分为 1,000 个字符块列 chunk1、chunk2、... chunkn,CAST 为 VARCHAR2(1000)。

    我们发现 Oracle 不喜欢拥有超过 16 个这样的列,因此我们不得不将视图拆分为一组 16 个这样的列。

    这意味着您必须检查 CLOB 中数据的最大大小,以便知道需要多少块/视图。不用说,动态地执行此操作会增加复杂性。

    1. 在 MariaDB 中创建一个视图来查询视图。

    2. 在 MariaDB 中创建表/视图,将块连接到单个文本列中。

    注意,在我们的案例中,我们发现使用 ODBC Connect 引擎在 MariaDB 数据库之间复制 Text 类型的列也存在问题,并且需要类似的拆分方法。

    坦率地说,我宁愿为此使用 Java/C#。

    【讨论】:

    • 感谢您的回答。我看到了一篇关于在 Oracle 中编辑视图的帖子,但在我的情况下,我不允许修改 Oracle 表:(。如果我可以修改 Oracle 表,你可以帮助我理解如何处理这个问题。我会尝试去使用 Java
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 2015-06-26
    • 1970-01-01
    相关资源
    最近更新 更多