【问题标题】:Oracle output different in SQL Developer and excelSQL Developer 和 excel 中的 Oracle 输出不同
【发布时间】:2016-03-05 02:45:19
【问题描述】:

我面临一个非常不同的问题,无法弄清楚可能是什么原因造成的。
我在 SQL Developer 中运行了一个查询,该查询来自 4 个不同表的连接。
然后,我将结果网格中的输出复制到 Excel 中。

现在,当我在 SQL Developer 中查看输出并将其与 excel 中的数据进行比较时,它们看起来不同

例如,对于同一行,列中有不同的值。 这怎么可能呢?
我正在使用 Oracle 12C。

【问题讨论】:

  • 你能发布一个测试案例来证明这个问题吗?在我的脑海中,也许你有一个不确定的查询。也许您实际上对这两个查询有所不同。也许您在复制数据或比较数据时犯了错误。也许您连接到不同的数据库/模式/任何东西。也许您希望数据按特定顺序排列,但您得到的数据顺序不同。
  • 不幸的是,它是生产数据,所以我无法在此处生成它,但我可以向您保证以下几点: 1. 我使用的是单个查询。另一个数据集只是复制并粘贴到 Excel 中。 2. 由于它是完整的数据集副本,因此出错的可能性非常小。中间我没有改变任何东西。
  • 在 Excel 中,转到“数据”选项卡,然后按“文本到列”按钮。选中分隔符,点击下一步。在第二个屏幕上,查看已检查的分隔符。在这些分隔符之后粘贴数据。因此,如果选中了句点,它将用小数分割数字。如果选项卡是唯一选择的选项,通常效果最好。
  • 我查过了。一切看起来都很好。唯一选择的值是选项卡。问题不在于列的顺序,列本身的数据似乎是错误的。例如在 SQL Developer 中,我看到 A 列和 B 列的值为 6001 和 6001,但在 excel 中,值变为 6001 和 6002。
  • 如果您无法生成测试用例,那么任何人都很难推测您可能遇到了什么问题。我猜你有一个不确定的查询,或者你在比较数据时犯了一个错误,可能是因为你期望数据按特定顺序但没有提供order by。您是否可能遇到过 Oracle 错误?当然。但我敢打赌。

标签: excel oracle oracle-sqldeveloper


【解决方案1】:

$ 0.02 more ... 从 SQL Developer 中复制数据对我来说一直很干净。 (@thatjeffsmith 是正确的;这是剪贴板行为)

当我复制到 Excel 时,有时目标工作表中的默认格式会影响数据的最终外观。如果您最终导出该电子表格(例如另存为 ... 并选择 CSV),您将对数据进行另一次转换。

【讨论】:

    【解决方案2】:

    我有同样的问题。
    据我了解,这是与 SQL Developer 相关的问题。

    你说的是 Excel,所以我想你是在 Windows 上。

    当您说:复制时,windows 会尝试复制对象的内容。

    问题是:SQL Developer 上的网格并不是一个包含所有结果的对象。它只显示一部分数据。因此,实际上,虽然它可以在内存中产生所有结果,但您无法从中复制和粘贴,即使不是一个小区域。

    从 SQL Developer 到 Excel 的最快方法是:

    • 运行查询
    • 移动到网格的末尾,以获取所有结果
    • 右键单击网格并选择:导出
    • 随心所欲地导出

    我知道这种方式不如复制粘贴快,但是由于 SQL Developer(或 Java,我不知道)的限制,当您有更多的几行时,这是正确的方式。

    【讨论】:

    • 嗯,什么?如果行在网格中可见,您绝对可以将它们复制到剪贴板,没问题。如果您也想要列标题,只需使用 ctrl+shift+C 将其复制出来。一旦它出现在剪贴板上,问题就在于操作系统和 Excel 之间如何进入电子表格
    • @thatjeffsmith,是的,但它仅适用于可见行和缓冲区中的更多行。不是每次,在有大量数据的列表中,在 Windows 上,使用 sql developer >= 4.0
    • 对,如果复制您选择的内容,这就是您获取的内容。 ctrl+pgDn 将强制完全提取。如果有很多行,使用导出向导会更容易,尽管这会再次运行查询。如果它很大,我只是做 spool table.csv select /*csv*/ * from table;并在 excel 中打开,瞧
    【解决方案3】:

    我终于找到了我面临的问题。升级到Oracle 12C后确实是Oracle问题。我们与 Oracle 支持人员进行了交谈,他们回复如下: 在哈希连接将接收行集作为输入并一次生成一行作为输出的情况下,涉及哈希连接的查询会返回错误的结果。

    因此,查询变得不确定,并在不同的实例中给出不同的计数。 当查询在 SQL Developer 中使用 where 子句运行时,由于 where 子句,SQL Developer 提供了不同的输出,因为它正在更改执行计划,但是当我将其粘贴到 Excel 中然后过滤时,它显示了不同的值,因为在这种情况下,查询计划不同,因为没有 where 子句。

    对不起,如果我的问题引起了任何混乱。在要求 DBA 就此问题联系 Oracle 支持之前,我只是想确认是否是其他问题。

    【讨论】:

      猜你喜欢
      • 2021-11-12
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      • 2019-07-12
      • 2011-06-07
      相关资源
      最近更新 更多