复杂视图显示表的错误值

时间:2016-06-02 08:01:50

标签: sql oracle12c

我们的dev dbs中有一个有趣的行为。

有人建立一个新视图并将其与旧视图进行比较,并使用类似

的语句
select * from old_view where id=1234
union
select * from new_view where id=1234;

它显示了一个值的差异,但如果你单独执行它们,它们会显示相同的值。 所以,我查看了old_view,它看起来像这样:

select some_function() as a,
some_value as b,
to_char(some_date, 'YYYYMMDD') as c,
DECODE (funny_table.funny_field, 0, '01', '12') AS D, --that's the funny value
null as e,
some_value as f
from some_view a
          LEFT OUTER JOIN some_table 
             ON something
          LEFT OUTER JOIN funny_table ON something
          LEFT OUTER JOIN some_table ON something;

现在,它又变得奇怪了。如果我执行此操作,使用where子句中的id,它可以正常工作。如果我在select-part的末尾添加funny_table.funny_field,它会显示错误的值(0而不是1),并且解码也会显示错误的值。 当我选择funny_table时,它似乎也很好。

我试过

ALTER SYSTEM FLUSH SHARED_POOL;

ALTER SYSTEM FLUSH BUFFER_CACHE;

没有改变任何内容,DBMS_REPAIR.CHECK_OBJECT也没有显示任何错误。

有什么建议吗?

0 个答案:

没有答案