Oracle同义词以及同义词循环链错误。

同义词:

就是别名的意思。与视图类似,是一种映射关系。

是表、索引、视图的对象的别名。

创建:

create public synonym table_name for user.table_name;


好处:节省数据空间,不同用户操作同一种表无差别。能够在不同的数据用户之间实现无缝交互。

简化对象访问  和  提高对象访问安全性。在开发中对统一数据库,多用户操作。如果没有同义词,个人用户要操作其他表时  需要  用户名.Object,来访问。

用同义词就不需要 加用户了。简化sql语句。

为分布式数据库,的远程对象,提供位置,透明性。


分为共用同义词和私有同义词。


若创建的是公有同义词,则其定义存储在dba_synonyms中,查询时需要具有相关权限。


同义词循环链报错:

因为存在同义词,但同义词没有相应的对象(对应的表,等对象 被删了)。

删除数据库对象,但是忘记删除同义词。

删除一个用户,但忘记删除此用户中相关的同名。

创建同名时,同名对应的数据库对象已经被删掉了。


网上有很多解决方法。

1.一般同义词是和表名或者视图名一样的。这样方便使用。

select * from dba_synonyms where  table_owner='TEST' and synonym_name<>table_name;

这里table_owner是你的用户 synonym_name是同义词名称 table_name 是表名。先看一下是否有不一样的。

2.select * from dba_synonyms

where table_owner='HD40'
and
synonym_name in
(select a.synonym_name from dba_synonyms a where a.table_owner='HD40'
minus
select object_name from user_objects) 

dba_synonyms是存储 同义词和表名等对象的关联表。

这条语句 查出,存在同义词,但是table_name对应的表或者对象已经被删了。

你会发现查询这些同义词都报同义词循环链错误。


一般就是这个原因。

网上说的查询结果,然后删除,其实就是删除这些数据。

或者你再创建出表等对象。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值