table_name 转换来自您在创建同义词时使用的"。
(您不需要在同义词名称前加上[schema name].。) ?还是我的 Oracle 版本阻止了这样做?
我会删除同义词创建中的",除非您确实将它们用于源数据库中的表创建。
正确的语法应该是:
CREATE OR REPLACE SYNONYM [synonym name]
FOR [shema name].long_refence_object_name@dblinkname;
编辑
现在我们再谈一点。
-
在 MSSQL 上,也创建一个同义词(调整语法):
CREATE PUBLIC SYNONYM long_refence_object_name
FOR [shema name]."long refence object name"
-
那么你可以从 Oracle 中使用它
CREATE OR REPLACE SYNONYM [synonym name]
FOR long_refence_object_name@dblinkname;
编辑2:
不,事实上这是你的同义词太长了。但是你不能拥有超过 30 个字符的对象。见here why。
当我这样做时:
create or replace synonym "my" for SCHM.very_long_namevery_long_nameve@QGM1.WORLD;
我的同义词有效(我可以访问远程表),我在用户同义词中看到它:
OPS$CHOJ04A my SCHM VERY_LONG_NAMEVERY_LONG_NAMEVE QGM1.WORLD
但是当我这样做时:
create or replace synonym "myvery_long_namevery_long_nameve"
for SCHM.very_long_namevery_long_nameve@QGM1.WORLD;
那我就不能用
访问对象了
ORA-00972: identifier is too long
我这个可怕的名字:
OPS$CHOJ04A /1d23ec99_MYVERY_LONG_NAMEVERY SCHM VERY_LONG_NAMEVERY_LONG_NAMEVE QGM1.WORLD
结论:
据我所知,Oracle 中任何对象的同义词都不能超过 30 个字符。这是产品限制。
您仍然可以使用您创建的同义词,如下所示:
SELECT * FROM "/1d23ec99_MYVERY_LONG_NAMEVERY";
如果您无法更改应用程序中的查询,不确定是否有帮助。