【发布时间】:2019-03-16 19:43:28
【问题描述】:
我正在处理的核心产品发生了一些变化,一些表变成了现在的视图,它们不再工作了,因为无法使用前面的架构名称引用视图。
例如下面会返回错误:ORA-00942: table or view does not exist
select * from my_schema.my_view;
虽然从视图中直接选择可以正常工作
select * from my_view;
如果是表,上述两种情况都可以正常工作,只是视图不接受前面的schema_name。
这是为什么呢?有没有体面的解决方法?
编辑:选择由 my_schema 用户执行
【问题讨论】:
-
MY_VIEW 现在可能是指向视图的公共同义词,而您自己的架构中没有同名的视图(或表)。在考虑解决方法之前,请先尝试找出原因。
-
你可以做这样的事情......我知道我可以从 V$VERSION 中选择,但不能从“我的模式”.V$VERSION 中选择。然后我可以运行
select * from all_objects where object_name = 'V$VERSION';- 这表明 V$VERSION 是公共同义词(不是视图!) -
@mathguy 它找不到 my_schema.V$VERSION。运行第二个选择它会找到公共同义词。
-
我希望你没有完全按照我写的那样运行声明,
V$VERSION。当你用MY_VIEW运行它时,你会得到什么? (假设这是您要查找的真实视图名称 - 如果不是,请根据需要替换!) -
@mathguy 我认为您对公共同义词的理解是正确的。 my_view 是 my_view_r 的公共同义词。我可以从 my_schema.my_view_r 查询。我可以为 my_view_r 添加另一个同义词 my_schema.my_view 吗?