【问题标题】:How can I get data in an Oracle CLOB that is greater than 32k into a LONG?如何将 Oracle CLOB 中大于 32k 的数据放入 LONG?
【发布时间】:2016-12-23 19:15:52
【问题描述】:

有没有办法将 CLOB 数据转换为 LONG?它只是一个非常大的 XML 字符串。这是针对遗留系统的,不幸的是,我们目前无法摆脱 LONG。任何帮助,将不胜感激。我很好奇这是否可以通过 PL/SQL 完成,因为我们尝试过的方法涉及遍历 CLOB,但随后您会达到可变大小限制。谢谢

【问题讨论】:

标签: c# sql oracle plsql


【解决方案1】:

有没有一种方法可以将 XML 字符串拆分为两列或更多列?我知道您不能离开 LONG,但也许您可以创建第二列并存储部分值(例如标题或一些外部 XML 标记)和原始列中的详细信息?这意味着该值存储在两列中(这并不理想)但它可以解决您的问题?

不是理想的解决方案,但它可以让您考虑替代方案。

【讨论】:

  • XML 文档可以是 10 或 100 MB,我已经处理了超过 1GB 的 XML。这不是解决问题的方法。
  • 是的,这不是一个理想的解决方案,尤其是如果您有像您建议的那样的大型 XML 字符串,但它可能满足 OP 的需求,或者至少让他们想到一个替代解决方案。跨度>
【解决方案2】:

您不能将长度超过 32k 的字符串插入到 PL/SQL 中的长列中。您可以使用 Java、C、VB、C# 等编程语言来实现(有很多示例)。但是,long 列在 20 多年前被 Oracle 弃用(有充分的理由,因为它们有很多限制),您现在真的应该转换为 CLOB。没有任何理由将它们包含在您的数据库中——即使是旧的旧借口也是一个有争议的问题——尤其是在转换相对容易的情况下。

https://docs.oracle.com/cd/B28359_01/appdev.111/b28393/adlob_long_lob.htm#i1023103

【讨论】:

  • 正如 OP 所述,转换为 CLOB 不是一种选择。我们知道它们已被弃用以及它们的局限性。这里面有答案吗?
  • 为什么不是一个选项?我在一个遗留系统上工作(300 万行代码,系统已有 25 年历史),我们将 LONG 转换为 CLOB。
  • 因为他们改变了它并且它破坏了应用程序。我们无权访问应用程序的代码。所以他们试图恢复到同样失败的备份……哎呀。现在他们正试图将其改回长。我在 C# 中工作,所以只是用它来转换。只是想帮助我的 dba 伙计们。
猜你喜欢
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多