【问题标题】:Error - value too large for column错误 - 列的值太大
【发布时间】:2018-11-10 23:33:15
【问题描述】:

是的,有人问过这个问题的其他实例,但我找不到有用的答案。

我在oracle sql developer中使用数据导入向导,要插入的数据集大约有8000行。我一直收到错误消息,告诉我我尝试插入的值对于该列来说太大了。

完全理解这意味着什么。

编辑 - ThatJeffSmith 在下面给出了一个很好的答案:

  • 将预览限制设置为 > 行数

  • 检查提醒我可能存在宽度问题的警告消息

  • 手动将列宽调整为大数字 (4000)

发生的事情很奇怪,对我来说,请多多包涵。我尝试了所有这些步骤。我发现当我将预览限制设置得很高,并且我实际上一直滚动(用鼠标)时,它在第 4 步中调整了一些列宽,例如从 26 到 128。这很有帮助,并且意味着我没有看到#2,列警告消息。伟大的。当我到达最后一步,我可以查看详细信息时,我打开了包含列标题及其定义的部分,列宽仍然与之前没有变化!

我一遍又一遍地遇到这个问题,直到我在第 4 步中单击 每个 列名(下图 2),这样所有列名都是粗体的。所有的列宽都是正确的,它们仍然在最终窗口中显示原始的、不正确的长度,但是在单击所有列之后……它实际上是正确且完整地导入的。

好的,我明白了。

谁能告诉我发生了什么事,即为什么我必须经历这么多步骤?

我很困惑。我不是程序员,但过去曾使用过诸如 SPSS、R、STATA、SAS 等之类的东西……它们从来都不是问题……他们通读数据,并适当地设置宽度.

无论如何,感谢 JeffSmith 提供了一个非常深入的答案,你是真正的男人。如果有人知道为什么它只在我单击每一列后才起作用,请告诉我,这非常令人困惑,我希望不必再这样做了。

【问题讨论】:

  • 如果这是专门针对 SQL Developer 的,那么值得标记它。
  • 好电话,已添加标签。

标签: sql oracle import oracle-sqldeveloper


【解决方案1】:

我以前遇到过这个问题。它涉及频繁捕获 excel 数据。数据始终采用相同的格式,因此我编写了一个宏来评估每个单元格的字符长度并在整个行中求和。然后它将按行的组合字符长度对表进行从高到低的排序。这总是设法将每列的最长字符长度放入前 50 位,以便始终将默认格式确定为该列最宽的格式。我想如果您还执行 excel 捕获,这可能会有所帮助,尽管这在您的问题中并不明显。

【讨论】:

    【解决方案2】:

    绝对!

    适当设置预览限制。

    请注意,您设置的越高,您要求使用的内存就越多,以便我们可以读取所有数据。

    然后,当您到达列定义时:

    如果您将新列设置得太窄,根据我们通过已读入内存的行的预览窗口所知道的情况,我们会告诉您“数据预览”面板中存在问题。滚动 8000 行可能需要一段时间,但您会根据源数据列警告指示器知道那里存在问题。

    然后,我们通过下拉菜单为您提供 3 条建议:

    第一个数字 - 大到足以容纳最大尺寸,然后是一些 第二个数字 - 向上舍入到“中等”级别的最大大小 第三个数字 - 根据您的数据样本四舍五入到理论上的最大大小。

    所有这些都是有根据的最佳猜测。您应该有一个数据模型可供参考;)

    【讨论】:

    • 请查看我经过大量编辑的原始问题。你非常很有帮助,但我仍然有很多问题要让它发挥作用。非常感谢您提供的任何见解。
    • 需要更多信息@Adam_S - 是否只有 8000 条记录要导入?并且您将导入预览设置为 8000,并按照指示调整新列宽,但仍然发现记录太宽而无法容纳?如果是这样,那将是一个错误。您可以通过电子邮件将您的 csv/excel 发送至 jeff.d.smith@oracle.com。这可能是一个迭代过程 FWIW,我需要 2 到 3 次才能让一切都“正确”。创建一个新的 oracle 表并不是一项简单的任务——您通常必须长时间忍受这些决定。因此,大小并定义适合数据转发的列,而不是你的 xlsx 中的内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 2016-09-21
    • 2023-03-23
    • 2017-06-08
    • 1970-01-01
    • 2017-08-12
    相关资源
    最近更新 更多