【问题标题】:oracle: add large string to clob columoracle:将大字符串添加到 clob 列
【发布时间】:2021-02-12 23:41:05
【问题描述】:

我想在 Oracle 数据库的 CLOB 列中添加一个大字符串(超过 76k 个字符)。 我需要从 liquibase 框架运行脚本。 如何做到这一点?

简单插入 INSERT INTO table_clob (clob_column) VALUES (to_Clob('string above 72000 chars...')); 有和没有to_clob() 方法返回的异常如下:

ORA-01704:字符串文字太长

无法按照此处描述的程序从文件中加载数据:https://oracle-base.com/articles/8i/import-clob 因为我没有任何目录的权限

搜索了谷歌,但没有找到任何符合我要求的解决方案。 有什么建议吗?

更新:

经过几个小时的搜索终于在这里找到了解决方法:https://stackoverflow.com/a/49817056/1622703

这还不够,因为我需要手动将文本剪切为 3 块(大约 30k 个字符),但它可以工作。 现在只需要弄清楚我们如何动态地做到这一点,以防字符串具有不同长度的字符(例如超过 10k 个字符)。

【问题讨论】:

    标签: oracle clob


    【解决方案1】:

    用单引号括起来的硬编码字符串称为字符串文字。一个例子是'Hello world'。另一个示例是您尝试在表中插入的非常长的字符串。相比之下,'abc' || 'def' 是一个字符串表达式,但它不是字符串 literal。同样,to_char(sysdate, 'yyyy-mm-dd') 是一个字符串表达式,但不是 literal。 “字面量”是指固定的、硬编码的文本。

    您面临的问题与insertto_clob() 或表中列的数据类型等无关。它仅与字符串文字本身有关。

    在 Oracle 中,字符串文字的长度最多为 4000 个字节(如果数据库设置为扩展 MAX_STRING_SIZE,则为 32767 个字节)。 PERIOD!没有办法。

    所以,问题是,你怎么能得到一个字符串,只要你有一个字符串到一个带有CLOB 列的表中。答案首先取决于您是如何接收字符串的。最好的选择是如果它已经分块 - 作为字符串的集合,带有一个标签(一个 id)来跟踪哪个片段属于哪个 CLOB 和一个序号(显示它是否是第一个块,第二个等)然后您可以在第一个块上使用TO_CLOB() 以及连接运算符重新组装它们。

    如果您的过程是在键盘上键入 72000 个字符,则必须一次键入 4000 个字符,用单引号括起来,并使用连接运算符(基本上是我上面描述的手动操作)。您还必须在第一个片段上使用TO_CLOB()(否则连接将失败)。

    另一个选项是将字符串作为一个值,来自一些支持长字符串(与 Oracle 的 CLOB 兼容)的应用程序,并且可以将这些值移交给 Oracle 数据库,而无需写出硬编码完整的字符串。

    所以,球在你的球场上。第一个问题是,长字符串到底是从哪里来的?

    【讨论】:

    • 感谢 mathduy 的输入。该字符串将由业务伙伴手动提供,长度可以变化。
    猜你喜欢
    • 1970-01-01
    • 2020-11-23
    • 2016-10-08
    • 2019-03-16
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 2020-01-13
    • 2010-12-11
    相关资源
    最近更新 更多