执行时遇到 ORA-00942(“表或视图不存在”)
select * from brunch
但是,执行时没有这样的问题
select * from joe.brunch
我可以知道这里有什么问题吗?
不合格,BRUNCH
指的是与JOE.BRUNCH
当前会话中不同的对象。你有几个选择来解决这个问题。
创建公共同义词。这将允许任何对JOE.BRUNCH
表具有权限的用户通过查询来访问它BRUNCH
为 joe.brunch 创建公共同义词 brunch
创建私有同义词。这将只允许当前用户通过查询访问JOE.BRUNCH
表BRUNCH
为 joe.brunch 创建同义词 brunch
将当前会话的当前架构更改为JOE
. 这将导致当前会话中的所有非限定引用解析为JOE
架构而不是当前用户的架构
ALTER SESSION SET current_schema = JOE
有几个可能的原因
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';
我发现我引用的表(Flyway 的schema_version表)是用双引号创建的......因此无论在哪里引用它都需要双引号。
带引号的标识符以双引号 (") 开头和结尾。如果您使用带引号的标识符命名架构对象,则在引用该对象时必须使用双引号。
在实践中,这些方法有效:
SELECT * FROM MYSCHEMA."schema_version";
SELECT * FROM "MYSCHEMA"."schema_version";
当这不存在时(-> ORA-00942:表或视图不存在):
SELECT * FROM MYSCHEMA.schema_version;