ORACLE 命名空间

来源:互联网 发布:淘宝不记名手机卡购买 编辑:程序博客网 时间:2024/05/13 18:32

不知道大家在学习的过程中有没有注意到过这样的一个问题,当你创建一个表,名字为TEST。也许过几天当你做索引或者视图实验的时候,想再次创建一个名字为TEST的索引或视图的时候,ORACLE会提示你已经存在该对象。本来我也没太在意,我以为就是以前可能创建过一个同名的对象呗,可做的实验多了我发现好像里面有些蹊跷,比如说我有个表叫TEST,那么当我再创建一个TEST视图的时候就会报错,可我如果再创建的不是视图,而是一个叫做TEST的索引的时候,就不会报错。由此引申出了命名空间的概念,在这之间我一直没在ORACLE中思考过这个概念,只是在学习C++的时候知道有namespace。于是去网上搜了些相关资料,自己做了下实验,在这里小总结一下~

 

命名空间定义了一组对象类型,在命名空间里,对象的名字必须是唯一的,当然,在不同的命名空间里,是可以使用相同的的名字的。

 

下面的对象类型共享同一个命名空间:
• Tables
• Views
• Sequences
• Private synonyms
• Stand-alone procedures
• Stand-alone stored functions
• Packages
• Materialized views
• User-defined types

 

 

因此,如果数据库中有一个表叫做TEST,那么就不能再创建一个叫做TEST的视图,至少,在一个schema中是不可能出现这种现象的。

 

下面的对象类型有各自的命名空间:
• Indexes
• Constraints
• Clusters
• Database triggers
• Private database links
• Dimensions

 

 

所以你可以创建一个叫做TEST的索引,即使在相同的schema中。

 

不受Schema局限的对象类型(Non schema objects)有它们自己的命名空间,如下:
• User roles
• Public synonyms
• Public database links
• Tablespaces
• Profiles
• Parameter files (PFILEs) and server parameter files (SPFILEs)


所以两个Non-schema objects可以用相同的名字。

原创粉丝点击