有没有办法找到在 Oracle 12c 中为其创建同义词的对象的基本类型?

Is there any way to find the base type of object for which the synonym is created in Oracle 12c?

 CREATE SYNONYM office
   FOR SEQ001;

我需要一些系统 table/any 其他方式给我信息 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 显示所有 现有 同义词,但您需要额外的权限才能访问它。