Oracle 同义词(synonym)详解

1、同义词

  • Oracle 中 同义词 synonyms,其实质就是 对象 的一个 "别名",此对象可以是 Table、View、Package、Function、Procedure、Sequences、Index 等。
  • 由于其只是一个 别名,所以除了 数据字典中的定义不占任何空间(这一点,与 视图 类似)

使用同义词常见的好处:

-- 1. 简化对象的访问
-- 2. 安全:屏蔽了对象的名字(一般同义词名和表名一致)及其拥有者(属主)
SELECT * FROM sys.dual; -- 使用同义词前
SELECT * FROM dual; -- 使用同义词后

1.1 前提条件

  • 该用户必须拥有 创建 同义词 的权限,可通过下列语句进行查询。
序号 权限名 解释
1 CREATE SYNONYM 创建私有同义词权限
2 CREATE PUBLIC SYNONYM 创建公有同义词权限
3 CREATE ANY SYNONYM 上述都有
-- 查询权限语句
SELECT t.* FROM dba_sys_privs t WHERE t.privilege LIKE '%SYNONYM%' ORDER BY 1, 2;
SELECT t.* FROM user_sys_privs t WHERE t.privilege LIKE '%SYNONYM%' ORDER BY 1, 2;

-- 系统权限,授权语句
GRANT CREATE ANY SYNONYM TO <其他用户>; 

-- 对象权限,授权语句,若其他用户想查询(和表授权是一样的)
GRANT SELECT ON <synonym> TO <其他用户>;

1.2 权限分类及优先级

  • 在有私有同义词和公有同义词的相同的情况下,Oracle优先选择私有同义词对象

在这里插入图片描述

2、语法

2.1 详细解析

CREATE [PUBLIC] SYNONYM [schema.] <synonym_name>
   FOR [schema.] Object[@db_link];

在这里插入图片描述

  • OR REPLACE
    • 对于具有任何依赖表或依赖有效用户定义对象类型的类型同义词,不能使用or replace子句。
  • [ EDITIONABLE | NONEDITIONABLE ] : 是否启用编辑
    • 如果对模式中的模式对象类型同义词启用了编辑,请使用这些子句指定同义词是已编辑的对象还是未编辑的对象。对于私有同义词,默认值是可编辑的。对于公共同义词,默认值是不可添加的
  • PUBLIC
    • 指定 public 创建公共同义词。所有用户都可以访问公共同义词。但是,每个用户必须对基础对象拥有适当的权限才能使用同义词。
    • 若省略,则为 private 私有的。
  • schema
    • 指定包含同义词的 schema 。如果忽略模式,oracle数据库会在自己的模式中创建同义词。如果指定了public,则不能为同义词指定 schema
  • synonym
    • 如果兼容的初始化参数设置为12.2或更高的值,则同义词名称的最大长度为128字节。数据库将允许您创建和删除长度为129到4000字节的同义词。但是,除非这些较长的同义词名称代表java名称,否则它们在任何其他sql命令中都不起作用。
    • 如果兼容的初始化参数设置为低于12.2的值,则同义词名称的最大长度为30字节。数据库将允许您创建和删除长度为31到128字节的同义词。但是,除非这些较长的同义词名称代表java名称,否则它们在任何其他sql命令中都不起作用
  • SHARING
    • 同义词创建后,不能更改其共享属性
  • FOR
    • Table or object table
    • View or object view
    • Sequence
    • Stored procedure, function, or package
    • Materialized view
    • Java class schema object
    • User-defined object type
    • Synonym
  • dblink
    • 您可以指定完整或部分数据库链接,以便在对象所在的远程数据库上创建架构对象的同义词

2.2 常用

  • 在实际开发中,我们只需要熟悉下面几种语法即可。
  • 一般,我们只使用 公有同义词
-- 创建同义词
CREATE [PUBLIC] SYNONYM <synonym_name> FOR owner.object_name;

-- 删除
DROP [PUBLIC] SYNONYM <synonym_name>; -- 当同义词的原对象被删除时,同义词并不会被删除

-- 查询
SELECT * FROM DBA_SYNONYMS;
SELECT * FROM ALL_SYNONYMS;
SELECT * FROM USER_SYNONYMS;

-- 重编译
ALTER SYNONYM <synonym_name> COMPILE; -- 当同义词的原对象被重新建立时,同义词需要重新编译
发布了71 篇原创文章 · 获赞 38 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_34745941/article/details/94559831