【问题标题】:Differents SELECTs clauses change the number of rows (with same WHERE condition)不同的 SELECTs 子句更改行数(具有相同的 WHERE 条件)
【发布时间】:2014-07-04 14:00:06
【问题描述】:

我有这个问题(可能不是错误)。

在 Oracle 视图中,SELECT 中的列会更改从 DB 获取的行数。

VIEW的定义有误?

我认为这个事件只有在 VIEWS 中才可能发生,但在 TABLES 中永远不会发生,或者不是?

--16 ROWS
SELECT *
FROM MY_ORACLE_VIEW
WHERE CONDITION_1 = 'A' AND CONDITION_2 = 'B';

--112 ROWS
SELECT COLUMN_X, COLUMN_Y
FROM MY_ORACLE_VIEW
WHERE CONDITION_1 = 'A' AND CONDITION_2 = 'B';

注意:真实视图非常复杂

Oracle 版本来自 (SELECT * FROM V$VERSION):

  • Oracle 数据库 11g 企业版版本 11.2.0.4.0 - 64 位生产
  • PL/SQL 版本 11.2.0.4.0 - 生产
  • 核心 11.2.0.4.0 生产
  • 用于 HPUX 的 TNS:版本 11.2.0.4.0 - 生产
  • NLSRTL 版本 11.2.0.4.0 - 生产

【问题讨论】:

  • 不,这甚至不应该发生在视图中。这很奇怪。肯定还有更多。
  • 同意,这绝不应该发生。您是否比较了两个查询的计划?
  • 视图的复杂性可能是个问题。此外,您视图中的某些优化器语句可能会导致 Oracle 跳过查询。我已经看到了复杂视图、group by 和 unions 结合的问题。
  • 能否指定查询、数据库版本、平台、补丁等?
  • 无论如何,这是一个错误的结果,应该这样对待。向您的 Oracle 支持人员提出事件。

标签: sql oracle


【解决方案1】:

如果VIEW 目标是一个不断增长的表,就会发生这种情况。 或者如果 VIEW 在 where 子句中使用 TIME 变量。

您也可以尝试创建自己的简单视图,看看这是否是一个经常性的问题。

无论如何,除非您提供我们只能推测的视图代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    相关资源
    最近更新 更多