【发布时间】: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 支持人员提出事件。