如何创建“长refence对象名称”的同义词

时间:2017-03-29 07:39:53

标签: sql-server oracle oracle11g ora-00972

创建同义词后,参考对象名称发生变化; 我的剧本:

create OR REPLACE SYNONYM [schema name].[synonym name] FOR [shema name]."long refence object name"@dblinkname;

创建后我查找“长注释对象名称”:

它已更改为“/3248857lonobjectname

1 个答案:

答案 0 :(得分:0)

table_name转换来自您在同义词创建中使用的"

  1. (您不需要[schema name].之前的同义词名称。)?或者是我的Oracle版本阻止这样做?

  2. 我会删除同义词创建中的" ,除非您确实将它们用于源数据库中的表创建。

  3. 正确的语法应该是:

    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;
      

    EDIT2:

    不,实际上这是你的同义词名称太长了。但是你不能拥有超过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";
    

    如果您无法更改应用程序中的查询,则不确定是否有帮助。