执行
时,我遇到了ORA-00942(“表或视图不存在”)select * from brunch
但是,执行
时没有这样的问题select * from joe.brunch
我可以知道这里有什么问题吗?
答案 0 :(得分:9)
不合格,BRUNCH
指的是与当前会话中的JOE.BRUNCH
不同的对象。你有几个方法可以解决这个问题。
创建公共同义词。这将允许任何拥有JOE.BRUNCH
表权限的用户通过查询BRUNCH
创建PUBLIC SYNONYM早午餐 FOR joe.brunch
创建私人同义词。这将允许当前用户通过查询JOE.BRUNCH
BRUNCH
表
创建SYNONYM早午餐 FOR joe.brunch
将当前会话的当前架构更改为JOE
。这将导致当前会话中的所有非限定引用解析为JOE
模式而不是当前用户的模式
ALTER SESSION SET current_schema = JOE
答案 1 :(得分:3)
有几种可能的原因
1)有一个叫做早午餐的对象(表,视图,程序等)。 Oracle不知道您指的是哪一个。
2)最有可能的原因:该表存在于joe架构中,但您正在连接另一个尚未被授予joe.brunch对象选择权的用户
尝试
将joe.brunch选择授予your_user
并尝试此操作,查看有多少个对象与名称早午餐相匹配
选择* 来自all_objects 其中object_type in('TABLE','VIEW') 和object_name ='早午餐';
答案 2 :(得分:0)
我发现我引用的表格(Flyway的schema_version表格)是用双引号创建的......因此无论引用它还需要双引号。
带引号的标识符以双引号(")开头和结尾。 如果使用带引号的标识符命名模式对象,则必须使用 每次引用该对象时都使用双引号。
在实践中,这些有效:
SELECT * FROM MYSCHEMA."schema_version";
SELECT * FROM "MYSCHEMA"."schema_version";
如果没有(> ORA-00942:表格或视图不存在):
SELECT * FROM MYSCHEMA.schema_version;