oracle中对象命名问题
oracle中对象命名问题
在一个命名空间中,不能有有相同名字的对象
1.对于SCHEMA对象:
1.1同一用户的TABLES、VIEWS、SEQUENCES、PRIVATE SYNONYMS、STAND_ALONE PROCEDURES、STAND_ALONE FUNCTIONS、PACKAGES、SNAPSHOTS在一个namespace中
1.2同一个用户的INDEXES、CONSTRAINTS、CLUSTERS、DATABASE TRIGGERS、PRIVATE DATABASE LINKS在一个namespace中
2.对于非NONSCHEMA对象:
2.1整个数据库的USER ROLES、PUBLIC SYNONYMS、PUBLIC DATABASE LINKS在一个namespace中
2.2整个数据库的TABLESPACES、ROLLBACK SEGMENTS、PROFILES在一个namespace中
参考:
Oracle8 SQL Reference,Realease 8.0
在口岸系统中
PUB_PARA用户存在CTA_ERR表、同时PUB_CHK用户也有CTA_ERR表,并建立一个PUBLIC SYNONYM 也叫CTA_ERR,程序以PUB_PARA用户登陆数据库,访问CTA_ERR,数据库,那么数据库如何决定使用那个表,规则如下:
1.是否在当前用户下存在该表
2.是否在当前用户下存在该视图
3.是否存在一个表或视图的私有同名
4.是否存在一个公共同名