有什么方法可以找到在Oracle12c中为其创建同义词的对象的基本类型吗


CREATE SYNONYM office
FOR SEQ001;

我需要一些系统表/任何其他方式来提供SEQ001是序列的信息。

简而言之,我需要一个查询,该查询只登记为同义词对象创建的同义词,而不登记其他对象。

应该是这样的:

SQL> create sequence seq001;
Sequence created.
SQL> create synonym syn_se for seq001;
Synonym created.
SQL> select s.synonym_name, o.object_name, o.object_type
2  from user_synonyms s join user_objects o on o.object_name = s.table_name;
SYNONYM_NAME    OBJECT_NAME     OBJECT_TYPE
--------------- --------------- -------------------
SYN_SE          SEQ001          SEQUENCE
SQL>

现在,您可以对其应用不同的过滤器,例如where o.object_type = 'SEQUENCE',以仅查看与序列相关的同义词。

要列出引用其他同义词的所有同义词,请使用字典视图ALL_SYNONYMS并检查同义词定义是否对应于其他同义词。

示例

第一个同义词引用一个序列,另外两个引用一个同义词。该查询显示了两个";嵌套的";同义词。

create sequence seq001;
create synonym syn001 for seq001;
create synonym syn002 for syn001;
create synonym syn003 for syn002;
select OWNER, SYNONYM_NAME
from all_synonyms
where (TABLE_OWNER, TABLE_NAME) in 
(select OWNER, SYNONYM_NAME from all_synonyms)
;
OWNER      SYNONYM_NAME
---------- ------------
OOO        SYN002      
OOO        SYN003   

视图ALL_SYNONYMS显示用户有权访问的所有同义词。还有一个字典视图DBA_SYNONYMS显示了所有现有同义词,但您需要额外的权限才能访问它。

最新更新