public同义词和表名相同时orcle访问机制

来源:互联网 发布:centos开启22号端口 编辑:程序博客网 时间:2024/05/16 10:45

今天遇到了一个感觉奇怪的问题:在用户user_b下创建了用户user_a下的表table_a的同义词(public),然后在用户user_c下可以直接select * from table_a这样访问;于是在用户user_c下创建了一张表,表名为talbe_a,这个时候再用select * from table_a的时候到底访问的是哪个呢?

经过查资料所知:

oracle的访问机制是:如果对象名前不加用户前缀,则先在当前用户下寻找这个对象,找不到时会去public下找同义词。如果加了用户前缀,那么就是那个前缀用户下的对象;

但是有一种情况是,如果在同一个用户下创建了一个与该用户下表名一样的PUBLIC同义词,那么该同义词在该用户下是访问不到的(其实这样访问本身没什么意义)。