同义词是一个标识符,用于在一条SQL语句中引用另一个数据库对象。
语法
通过使用CREATE SYNONYM命令来创建同义词。语法如下:
CREATE [OR REPLACE] [PUBLIC] SYNONYM [schema.]syn_name FOR object schema.object name;CREATE [OR REPLACE] [PUBLIC] SYNONYM [schema.]syn_name
FOR object_schema.object_name[@dblink_name];
使用DROP SYNONYM命令删除同义词。语法如下:
DROP [PUBLIC] SYNONYM [schema.] syn_name;
参数
参数名称 | 描述 |
---|---|
syn_name | 同义词的名称。同义词的名称在模式中必须是唯一的。 |
schema | 同义词所属的模式名。
说明 创建同义词时如果不指定模式名,那么同义词则会创建于搜索路径中第一个存在的模式里。
|
object name | 指定对象名称。 |
object schema | 指定对象所属的模式名。 |
描述
同义词是一个标识符,用于在一条SQL语句中引用另一个数据库对象。
通常在要求数据库对象与模式名完全符合的情况下,同义词是非常有用的。这样在一条SQL语句中就能够正确引用该同义词。一个为对象所定义的同义词,简化了单一且非限定名称的引用。
- 表
- 视图
- 序列
- 存储过程
- 函数
- 类型
- 其它同义词
在创建同义词时,不要求必须有引用的模式或引用的对象。因为一个同义词可以引用一个不存在的对象或模式。如果删除同义词引用的对象或模式,该同义词会因此而失效。您必须要明确删除要移除的同义词。
当同义词和任何其他的模式对象在一起时,PolarDB会使用搜索路径来解决非限定的同义词名称。如果有两个相同名称的同义词,同义词的非限定引用将解决搜索路径中带有指定名称的第一个同义词。如果public存在于搜索路径当中,您可以在那个模式中引用一个同义词,且并不需要符合那个模式名称。
当PolarDB执行SQL命令时,会就同义词的基本数据库对象去检查当前用户的权限。如果用户没有该对象正确的授权,则无法执行SQL命令。
示例
- 创建同义词
用replace子句来替换现有的同义词定义,使之赋有新的定义。
使用public子句在public模式中创建同义词。那么与Oracle兼容的create public synonym命令会创建所属于public模式的同义词。
CREATE [OR REPLACE] PUBLIC SYNONYM syn_name FOR object schema.object name;
下列仅为简写的方法:
CREATE [OR REPLACE] SYNONYM public.syn_name FOR object schema.object name;
下列示例创建了名为personnel的同义词,同义词personnel用于引用表polardb.emp
CREATE SYNONYM personnel FOR polardb.emp;
除非同义词在CREATE SYNONYM命令中为模式限定的,否则该同义词就会创建于搜索路径中的第一个模式中。通过执行下列命令,您可以浏览搜索路径:
SHOW SEARCH_PATH; search_path ----------------------- development,accounting (1 row)
在所举的示例中,如果不存在名为development的模式,同义词则会创建于名为accounting的模式中。
现在您可以通过使用同义词personnel,在任何SQL语句(DDL或DML)中引用模式polardb中的表emp:
INSERT INTO personnel VALUES (8142,'ANDERSON','CLERK',7902,'17-DEC-06',1300,NULL,20); SELECT * FROM personnel; empno | ename | job | mgr | hiredate | sal | comm | deptno -------+----------+-----------+------+--------------------+---------+---------+-------- 7369 | SMITH | CLERK | 7902 | 17-DEC-80 00:00:00 | 800.00 | | 20 7499 | ALLEN | SALESMAN | 7698 | 20-FEB-81 00:00:00 | 1600.00 | 300.00 | 30 7521 | WARD | SALESMAN | 7698 | 22-FEB-81 00:00:00 | 1250.00 | 500.00 | 30 7566 | JONES | MANAGER | 7839 | 02-APR-81 00:00:00 | 2975.00 | | 20 7654 | MARTIN | SALESMAN | 7698 | 28-SEP-81 00:00:00 | 1250.00 | 1400.00 | 30 7698 | BLAKE | MANAGER | 7839 | 01-MAY-81 00:00:00 | 2850.00 | | 30 7782 | CLARK | MANAGER | 7839 | 09-JUN-81 00:00:00 | 2450.00 | | 10 7788 | SCOTT | ANALYST | 7566 | 19-APR-87 00:00:00 | 3000.00 | | 20 7839 | KING | PRESIDENT | | 17-NOV-81 00:00:00 | 5000.00 | | 10 7844 | TURNER | SALESMAN | 7698 | 08-SEP-81 00:00:00 | 1500.00 | 0.00 | 30 7876 | ADAMS | CLERK | 7788 | 23-MAY-87 00:00:00 | 1100.00 | | 20 7900 | JAMES | CLERK | 7698 | 03-DEC-81 00:00:00 | 950.00 | | 30 7902 | FORD | ANALYST | 7566 | 03-DEC-81 00:00:00 | 3000.00 | | 20 7934 | MILLER | CLERK | 7782 | 23-JAN-82 00:00:00 | 1300.00 | | 10 8142 | ANDERSON | CLERK | 7902 | 17-DEC-06 00:00:00 | 1300.00 | | 20 (15 rows)
- 删除同义词
像其他可被模式限定的对象一样,可能会有两个相同名称的同义词存在于搜索路径中。您可以包括一个模式名来明确要删除的同义词名称。除非同义词在DROP SYNONYM命令中为模式限定的,否则PolarDB就会删除在搜索路径中发现的第一个同义词实例。
您可以选择性地包括PUBLIC子句来删除所属于public模式的同义词。与Oracle兼容的DROP PUBLIC SYNONYM命令用于删除所属于public模式的同义词:
DROP PUBLIC SYNONYM syn_name;
下列示例删除了名为personnel的同义词:
DROP SYNONYM personnel;