17 oracle
我想找到一个表的外键,但可能有多个用户/模式与一个具有相同名称的表.如何找到当前登录用户看到的那个?有没有给它的主人的功能?如果有公共同义词怎么办?
spe*_*593 33
您可以查询ALL_OBJECTS视图:
select owner
, object_name
, object_type
from ALL_OBJECTS
where object_name = 'FOO'
Run Code Online (Sandbox Code Playgroud)
要查找同义词:
select *
from ALL_SYNONYMS
where synonym_name = 'FOO'
Run Code Online (Sandbox Code Playgroud)
只是为了澄清,如果用户用户的SQL语句引用没有模式限定的对象名称(例如'FOO'),Oracle FIRST会检查用户的模式以查找该名称的对象(包括该用户模式中的同义词).如果Oracle无法解析用户架构中的引用,则Oracle会检查公共同义词.
如果您正在寻找特定table_name的约束:
select c.*
from all_constraints c
where c.table_name = 'FOO'
union all
select cs.*
from all_constraints cs
join all_synonyms s
on (s.table_name = cs.table_name
and s.table_owner = cs.owner
and s.synonym_name = 'FOO'
)
Run Code Online (Sandbox Code Playgroud)
HTH
- 附录:
如果您的用户被授予访问DBA_视图的权限(例如,如果您的用户已被授予SELECT_CATALOG_ROLE),则可以在前面的SQL示例中替换" DBA_
'代替' ALL_
'.该ALL_x
观点只显示你已经授予的权限对象.该DBA_x
意见将显示所有数据库对象,你是否对他们还是不特权.
我在谷歌搜索如何在 Oracle 中查找表的所有者时发现这个问题是最重要的结果,所以我想我会为其他人提供一个特定于表的答案以方便其他人。
要查找 Oracle 数据库中特定表的所有者,请使用以下查询:
select owner from ALL_TABLES where TABLE_NAME ='<MY-TABLE-NAME>';
Run Code Online (Sandbox Code Playgroud)