小编Mys*_*ose的帖子

Oracle 视图忽略外部 WHERE 子句

再会,

这个难倒我了。我有一个相当讨厌的开发人员查询,我想将其存储在非物化的 Oracle 视图中。视图本身的文本在这里列出有点长,但它编译得很好并生成正确的结果集。视图查询本身使用 CTE 以及两个手动逆透视(UNPIVOT 运算符在 Oracle 10 中不可用)和相当多的 UNION。这个想法是重复使用每个 CTE '中间' 查询来提取各种聚合,否则这些聚合在单个查询中是不可能的(糟糕的数据库设计,不幸的是我无法控制)。需要许多聚合,这是我在速度、可维护性和可读性/自文档化代码方面可以提出的最佳解决方案。

现在,当我做一个简单的

SELECT *
  FROM myView;
Run Code Online (Sandbox Code Playgroud)

但是,每当我尝试过滤结果时,WHERE 子句似乎都被忽略了。类似的东西

SELECT *
  FROM myView
 WHERE DATA_TYPE = 3;  --  <== There is no DATA_TYPE = 3 in the result set
Run Code Online (Sandbox Code Playgroud)

仍然返回所有行,而它应该什么都不返回。涉及任何其他列的其他谓词似乎也被忽略。知道什么可能导致这种情况吗?上面的 SELECT 执行得很好,没有给出错误。

作为参考,DBMS 是 Oracle 10g。

提前感谢您的任何帮助。

编辑:

仍然展示相同行为的视图查询的精简版本如下(在 CTE 的内部和外部部分有更多的查询,为了紧凑,我只包含了两个内部和一个外部):

CREATE OR REPLACE VIEW FSA.FSA_V_DB_TOTALS
(
    DATA_CATEGORY, DATA_TYPE, HUMAN_STRING, ELEMENT_NAME, ELEMENT_VAL,
    CLASS_CD, REGION, CNTY, DIST, TRA, FRAN, PROP
)
AS
WITH
--Queries to generate intermediate result sets …
Run Code Online (Sandbox Code Playgroud)

oracle oracle-10g cte view

5
推荐指数
1
解决办法
3505
查看次数

标签 统计

cte ×1

oracle ×1

oracle-10g ×1

view ×1