blackantt 发表于 2011-01-16 14:17

哪些对象可以重名,重名后调用顺序是怎样的?怎样强制调用某个重名的对象?

哪些对象可以重名,重名后调用顺序是怎样的?


   表,view,synonym可以重名吗?如果能,比如都叫abc.那么我select * from abc 时调用的是哪一种对象? 如果我要调用某个指定的同名对象,怎么写?

renxiao2003 发表于 2011-01-16 14:22

重命名用rename oldname to newname

table,view,synonym都可以的。

blackantt 发表于 2011-01-16 14:36

hi,renxiao2003

   是重名,就是不同类型的对象能不能用同一个名字。调用某一个名字,怎么知道调用的是表,view,还是synonym?如果缺省顺序是先调用synonym,那么我想调用同名的view.怎么弄?

blackantt 发表于 2011-01-16 14:44

OWNER        OBJECT_NAME                                  OBJECT_TYPE
PUBLIC        UUU_COMMON_OBJECTS                SYNONYM
PUBLIC        UUU_OBJECTS                                  SYNONYM
UM                UUU_COMMON_OBJECTS                TABLE
UM                UUU_OBJECTS                                  VIEW

以上的对象结构,select * from uuu_objects,则调用的是哪一个,缺省顺序是什么?如果我要调用另一个,是否要写成
UM.uuu_objects的形式?

duolanshizhe 发表于 2011-01-17 08:08

一般来说在同一个schema下只允许同义词与其它对象同名   同义词本身也不能同名

当我们书写的程序代码中若引用了一个未限定的数据库对象,如表、视图、存储过程等等,数据库会根据一定的顺序去查询是否有被引用的对象。通常情况下,会按如下的顺序进行验证。首先是看看当前用户是否拥有这个对象;其次这个对象名是否是当前用户拥有的一个同义词;最后,才去判断公用同义词的情况。

Minsic 发表于 2011-01-17 10:51

摘自盖国强的《深入浅出oracle》:
Oracle首先查看在发出命令的用户模式中是否存在表或视图;
如果表或视图不存在,Oracle检查私有同义词是否存在;
如果私有同义词存在,将使用这个同义词所引用的对象;
如果私有同义词不存在,检查同名的公共同义词是否存在;
如果公共同义词存在,将使用这个同义词所引用的对象;
如果公共同义词不存在,Oracle返回消息“ORA_00942 table or view does not exist”。

blackantt 发表于 2011-01-17 12:12

本帖最后由 blackantt 于 2011-01-17 12:17 编辑

select owner,object_name,object_type from dba_objects where object_name='UT_OBJECTS';
         OWNER      OBJECT_NAME      OBJECT_TYPE
1      PUBLIC      UT_OBJECTS      SYNONYM
2      UM                UT_OBJECTS      VIEW

SELECT * from DBA_synonyms where synonym_name='UT_OBJECTS';
         OWNER      SYNONYM_NAME      TABLE_OWNER          TABLE_NAME      DB_LINK
1      PUBLIC      UT_OBJECTS                UM                              UT_OBJECTS      

太绕了,这么问吧。所有对象都是其它帐号的,帐号1下有个表objects,帐号2下有个view也叫objects,
                                                               帐号3下还有一个私用的同义词叫objects.另外系统中还有一个公用同义词也叫objects,
.如果本帐号下访问objects,请给出系统缺省的访问顺序?

blackantt 发表于 2011-01-17 14:29

结贴!

  thanks for all

   的确有67213个public的synonym,我原来所访问的每一个对象都是同义词.现在明白了
页: [1]
查看完整版本: 哪些对象可以重名,重名后调用顺序是怎样的?怎样强制调用某个重名的对象?