SQL 开发人员:为什么我不能 select 按列同义词?

SQL Developer: Why can't I select by column synonym?

我刚刚创建了一个列同义词

CREATE PUBLIC SYNONYM col_syn FOR X_CHILD.FIRST_NAME;

执行无误。

但是当我说

select dob, col_syn from x_child;

我明白了:

ORA-00904: "COL_SYN": invalid identifier
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:
Error at Line: 4 Column: 13

肯定存在“first_name”列: select * FROM x_child; 显示:

我已经按了至少 18 次提交并重新启动了 SQL 开发人员。这没有帮助。

此外,当我单击此架构中的同义词时,那里什么也没有。我能看到的唯一同义词是 table 同义词。我应该也能在这里看到列同义词吗?

一个同义词,它是 table、视图、序列、过程、存储函数、包、实体化视图、Java class 模式对象、用户-定义的对象类型,或另一个同义词。 列不能有同义词

同义词同时提供数据独立性和位置透明性。同义词允许应用程序无需修改即可运行,无论哪个用户拥有 table 或视图,也无论哪个数据库拥有 table 或视图。但是,同义词不能替代数据库对象的特权。必须先授予用户适当的权限,然后用户才能使用同义词。

当您在示例中创建同义词时,引用对象根本不需要存在。你的情况

CREATE PUBLIC SYNONYM col_syn FOR X_CHILD.FIRST_NAME; 

您正在创建一个 public 同义词(每个人都可以使用),它引用了对象 X_CHILD(这就是为什么您的 dba_synonyms 中有 reference_name X_CHILD ) 和 reference_type TABLE (不是列)

指定包含同义词的架构。如果省略模式,则 Oracle 数据库会在您自己的模式中创建同义词。 如果您指定了 PUBLIC,则不能为同义词指定架构。

https://docs.oracle.com/en/database/oracle/oracle-database/18/sqlrf/CREATE-SYNONYM.html#GUID-A806C82F-1171-478E-A910-F9C6C42739B2