4

执行时遇到 ORA-00942(“表或视图不存在”)

select * from brunch

但是,执行时没有这样的问题

select * from joe.brunch

我可以知道这里有什么问题吗?

4

3 回答 3

9

不合格,BRUNCH指的是与JOE.BRUNCH当前会话中不同的对象。你有几个选择来解决这个问题。

  1. 创建公共同义词。这将允许任何对JOE.BRUNCH表具有权限的用户通过查询来访问它BRUNCH

    为 joe.brunch 创建公共同义词 brunch

  2. 创建私有同义词。这将只允许当前用户通过查询访问JOE.BRUNCHBRUNCH

    为 joe.brunch 创建同义词 brunch

  3. 将当前会话的当前架构更改为JOE. 这将导致当前会话中的所有非限定引用解析为JOE架构而不是当前用户的架构

    ALTER SESSION SET current_schema = JOE

于 2011-09-29T02:25:24.000 回答
3

有几个可能的原因

1) 有不止一个对象(表、视图、过程等)称为早午餐。Oracle 不知道您指的是哪一个。

2) 最可能的原因:该表存在于 joe 模式中,但您作为另一个用户连接,该用户尚未被授予对 joe.brunch 对象的选择权限

尝试

将 joe.brunch 上的选择授予 your_user

试试这个,看看有多少对象与名称 brunch 匹配

select * from all_objects where object_type in ('TABLE','VIEW') and object_name = 'brunch';

于 2011-09-29T01:50:19.587 回答
0

我发现我引用的表(Flyway 的schema_version表)是用双引号创建的......因此无论在哪里引用它都需要双引号。

这是甲骨文所说的

带引号的标识符以双引号 (") 开头和结尾。如果您使用带引号的标识符命名架构对象,则在引用该对象时必须使用双引号。

在实践中,这些方法有效:

SELECT * FROM MYSCHEMA."schema_version";
SELECT * FROM "MYSCHEMA"."schema_version";

当这不存在时(-> ORA-00942:表或视图不存在):

SELECT * FROM MYSCHEMA.schema_version;
于 2016-12-05T05:21:17.210 回答