【问题标题】:How to Copy Only First 4000 Characters from Oracle NCLOB to NVARCHAR2(4000) Value?如何仅将 Oracle NCLOB 中的前 4000 个字符复制到 NVARCHAR2(4000) 值?
【发布时间】:2014-02-12 20:51:20
【问题描述】:

我是一名程序员,我正在编写一些 SQL 代码来从远程 Oracle 数据库中提取数据并将其插入到我们本地 MS SQL Server 上的一些表中。

我需要将一个 Oracle NCLOB 列带到我们的 MS SQL Server 数据库中的 NVARCHAR 列。

我们没有 DBA 人员为我做这件事。

就我的目的而言,拥有整个 NCLOB 值并不重要,因此 4000 个字符只是我选择的一个任意大的数字。

我的目标是尽可能多地在 Oracle 端的 NVARCHAR2 字段中保存数据,并且在日常数据刷新中仍然保持通过网络传输数据的实用性。

我已经看到很多关于获取所有数据以及获取超过 4000 个字符等的解决方案的参考。但是,我正在寻找一个简单的版本无需繁重的 DBA 级工作,我就可以轻松安装和维护。

【问题讨论】:

    标签: sql sql-server oracle plsql nclob


    【解决方案1】:

    查看http://asktom.oracle.com/pls/asktom/f?p=100:11:0::NO::P11_QUESTION_ID:367980988799

    你会想要使用 dbms_lob.substr

    根据上面引用的帖子:

    dbms_lob.substr( clob_column, for_how_many_bytes, from_which_byte );

    例如:

    select dbms_lob.substr( x, 4000, 1 ) from T;

    将为我提供 clob 的前 4000 个字符。请注意,使用时 SQL 和我一样,最大长度是 4000。你可以使用 plsql 得到 32k:

    declare my_var long; begin for x in ( select X from t )
    loop my_var := dbms_lob.substr( x.X, 32000, 1 ); ....

    【讨论】:

    • 我看过您引用的文章,但我从链接服务器收到错误消息到 Oracle,指出“字符串缓冲区太小” - 所以我继续前进。但是,由于您在答案中的引用而重新阅读它,我发现由于该字段是 NCLOB 我最好为双字节字符留出足够的空间。为此,我将字符数从 4000 更改为 2000 - 现在就像一个魅力。
    猜你喜欢
    • 2010-10-23
    • 2014-07-13
    • 2012-07-18
    • 2015-04-02
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多