SQL同义词使用

1|0Oracle 同义词理解及使用

  • 什么是同义词

    从字面上理解,同义词其实就是一个别名,类似于视图,是一种映射关系。同义词可分为私有同义词和公有同义词两类。

  • 私有同义词:一般为普通用户自己建立的同义词,创建该同义词需要create synonym权限。该类同义词一般在创建用户的模式内使用,若其它用户想使用的话,需要以创建用户的用户名作为前缀。

    -- 创建语法 create synonym 同义词名 for 表名; -- 删除同义词 drop synonym 同义词名;
  • 公有同义词:一般由DBA进行创建,所有用户都可以使用,创建该同义词需要create public synonym权限。该类同义词并非模式的对象,属于各模式通用。

    -- 创建语法 create public synonym 同义词名 for 表名; -- 删除同义词 drop public synonym 同义词名;
  • 注意点

    • 当公有同义词与私有同义词同名时,私有同义词优先。
    • 同义词指向的对象被删除后,同义词依然存在,再次以原来的对象名创建后,同义词依旧可用。

2|0创建同义词

  1. 创建某个用户下同义词

用sys账号给DM账号赋予CREATE SYNONYM的权限。假设user_temp是你要建同义词的用户。

GRANT CREATE SYNONYM TO user_temp;

这个时候你创建同义词的时候,如果找不到你要管理的user_res用户下的表tableA。(注:要在user_temp用户下创建user_res用户下tableA表的同义词)

这个时候还需要一个权限就是user_temp用户select tableA的权限,这个时候是在user_res用户下赋值的:

grant select on tableA to user_temp;

在user_temp用户下创建同义词:

create or replace synonym tableA for user_res.tableA;
  1. 创建公共同义词:
CREATE OR REPLACE PUBLIC SYNONYM tableA for user_res.tableA;

3|0同义词循环链解决方式

错误代码:ORA-01775

查看表的同义词

SELECT * FROM ALL_SYNONYMS where table_name = 'XXXX';

查找当前用户是否存在循环的同义词:

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

查找同义词没有对象的数据库对象

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

__EOF__

本文作者咫尺是梦
本文链接https://www.cnblogs.com/satire/p/15852513.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   satire  阅读(1013)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示