创建同义词后,参考对象名称发生变化; 我的剧本:
create OR REPLACE SYNONYM [schema name].[synonym name] FOR [shema name]."long refence object name"@dblinkname;
创建后我查找“长注释对象名称”:
它已更改为“/3248857lonobjectname
”
答案 0 :(得分:0)
table_name
转换来自您在同义词创建中使用的"
。
(您不需要[schema name].
之前的同义词名称。)?或者是我的Oracle版本阻止这样做?
我会删除同义词创建中的"
,除非您确实将它们用于源数据库中的表创建。
正确的语法应该是:
CREATE OR REPLACE SYNONYM [synonym name]
FOR [shema name].long_refence_object_name@dblinkname;
现在我们再多一点了。
,也创建一个同义词(调整语法):
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;
不,实际上这是你的同义词名称太长了。但是你不能拥有超过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";
如果您无法更改应用程序中的查询,则不确定是否有帮助。