不同的 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 条件)的主要内容,如果未能解决你的问题,请参考以下文章

提交文件并更改行数

当行数未知时,使用 javascript 更改行的类

在 git 中显示每个作者的更改行数

如何在 Flutter 中使用动画更改行/列状态?

与查询具有相同 WHERE 子句的子查询

将具有相同或不同长度的2个不同整数数组合并为一个大数组,并将它们从最小到最大排序