【问题标题】:Data output are correct but row positions are changing in PL/SQL Developer数据输出正确,但 PL/SQL Developer 中的行位置正在改变
【发布时间】:2015-07-28 06:56:26
【问题描述】:

我正在 PL/SQL Developer 工具中运行一个大的 SQL 查询(我可以显示)。我的本地数据库和 UAT 服务器数据库中的数据输出是正确的。但问题是为什么本地数据库的行位置与 UAT 服务器数据库不同。

本地数据库严格:

          PID  Termination_Date   Hire_Date</b>

第 1 行->    001      2013/07/01          2012/07/01
第 2 行_。 001                               2014/01/01

UAT 数据库 i:

Row1 -> 001                                    2014/07/01
第 2 行 ->001             2013/07/01           2012/07/01

如果我们认为 Local DB Row 1 在 UAT DB 中排在第二位。 笔记:- 我正在为相同的员工 ID 运行相同的 SQL 查询。

【问题讨论】:

    标签: plsqldeveloper


    【解决方案1】:

    您可以通过在查询中添加 ORDER BY 子句来修复它,因此无论您在何处执行查询,结果都将相同。

    【讨论】:

    【解决方案2】:

    这不是问题:这是一项功能。如果您没有使用“order by ...”明确要求特定的行排序(我的理解是您没有这样做),那么您就是在告诉 oracle: “看,oracle 我并不关心结果顺序,我只想让你以最快的方式检索这些行” 这正是它的作用。如果您在没有要求的情况下获得了您希望的结果订单,那么您非常幸运。 为了简化它,想象一下 oracle 只能通过全表扫描来检索数据:在这种假设的情况下,如果没有 order by 子句,您将按照它们物理存储在数据库文件中的确切顺序获取行。而且你无法预测这个顺序!您可能会认为此顺序与在数据库中插入行的顺序一致,但这仅在某一点之前是正确的:oracle 可能会决定通过回收曾经被前一行占用的空间来插入新行被删除。 这只是给你一个简单的例子,但还有许多其他因素会影响随意的结果顺序: Oracle 决定查询的“执行计划”时会考虑每个服务器上可能不同的因素:可用内存是一个因素,实际数据统计是另一个因素。 一个服务器可能决定最好的执行计划是全表扫描,另一个可能决定使用索引。

    此外:相同的查询,即使您实际发出“order by”,根据发出查询的人使用的 CLIENT(而非服务器)的国家设置,预计会给出不同的结果:不同的国家有不同的关于如何进行字母排序的规则:有人说数字在字母之前,有人说相反。 其他示例:假设您提取数字星期几(1..7)并对其进行排序。好吧:在欧洲的大多数国家,一周的第一天是星期一,而不是星期日(星期日是最后一天)。 所以:当你想要一个特定的排序顺序时,你必须要求它。而且您必须仔细问自己,您想要的顺序是否会受到执行查询的用户的国家设置的影响:如果您不这样做,您的应用程序可能会在与法语版 Windows 连接的人使用时崩溃(以及它可能是来自您没想到会出售您的软件的国家/地区的新潜在客户。这会使您失去客户)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 2020-12-10
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 2019-07-03
      • 1970-01-01
      相关资源
      最近更新 更多