不同的 SELECTs 子句更改行数(具有相同的 WHERE 条件)
Posted
技术标签:
【中文标题】不同的 SELECTs 子句更改行数(具有相同的 WHERE 条件)【英文标题】:Differents SELECTs clauses change the number of rows (with same WHERE condition) 【发布时间】: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 支持人员提出事件。 【参考方案1】:如果VIEW
目标是一个不断增长的表,就会发生这种情况。
或者如果 VIEW
在 where 子句中使用 TIME 变量。
您也可以尝试创建自己的简单视图,看看这是否是一个经常性的问题。
无论如何,除非您提供我们只能推测的视图代码。
【讨论】:
以上是关于不同的 SELECTs 子句更改行数(具有相同的 WHERE 条件)的主要内容,如果未能解决你的问题,请参考以下文章