Bootstrap

解析 Oracle 中的 ALL_SYNONYMS 和 ALL_VIEWS 视图:查找同义词与视图的基础操作

前言

🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF

1. ALL_SYNONYMS 视图

在 Oracle 数据库中,同义词(Synonym)是对数据库对象(如表、视图、存储过程等)创建的别名

使用同义词可以简化 SQL 语句,使用户无需使用完整的对象路径
例如,如果 USER_A 拥有表 TABLE_A,但 USER_B 也需要访问它,创建一个同义词 TABLE_A 允许 USER_B 直接查询,而无需写 USER_A.TABLE_A

ALL_SYNONYMS 视图存储了当前用户可以访问的所有同义词的信息,包括公有(PUBLIC)同义词和用户私有(PRIVATE)同义词
其典型用途是:

  1. 查找某个对象是否有对应的同义词
  2. 确定同义词实际指向的对象
  3. 排查数据库对象访问权限问题

ALL_SYNONYMS 视图的主要列如下:

列名数据类型说明
OWNERVARCHAR2同义词的拥有者(创建该同义词的用户)
SYNONYM_NAMEVARCHAR2同义词的名称
TABLE_OWNERVARCHAR2实际对象的拥有者(目标对象所在用户)
TABLE_NAMEVARCHAR2实际数据库对象的名称
DB_LINKVARCHAR2如果是远程数据库对象,则指向数据库链接
SELECT * FROM all_synonyms WHERE synonym_name = '表名';

作用:查找是否存在名为 表名 的同义词,并查看它指向的具体对象

基本截图如下:

在这里插入图片描述

2. ALL_VIEWS 视图

视图是基于 SQL 查询逻辑创建的虚拟表,它不存储数据,而是提供对基础表的动态访问
ALL_VIEWS 视图存储了当前用户可以访问的所有视图的信息

视图的作用包括:

  1. 供数据访问的抽象层,简化复杂 SQL 查询
  2. 制访问权限,只暴露部分数据
  3. 现数据整合,将多个表的信息整合到一个视图中

ALL_VIEWS 视图的主要列如下:

列名数据类型说明
OWNERVARCHAR2视图的拥有者(创建该视图的用户)
VIEW_NAMEVARCHAR2视图的名称
TEXT_LENGTHNUMBER视图定义 SQL 语句的长度
TEXTCLOB视图的 SQL 定义(通常存储在 CLOB 中)
SELECT * FROM all_views WHERE view_name = '视图名';

作用:查找是否存在名为 视图名 的视图,并查看其定义

示例结果:

OWNERVIEW_NAMETEXT_LENGTHTEXT
HRC_CY_AREA120SELECT EMP_ID, EMP_NAME FROM EMPLOYEES

C_CY_AREA 是 HR 用户下的一个视图
它的 SQL 逻辑是 SELECT EMP_ID, EMP_NAME FROM EMPLOYEES,即只返回 EMPLOYEES 表的 EMP_ID 和 EMP_NAME 列

3. 扩展

  1. ALL_SYNONYMS 用于查找数据库中的同义词,并查看它们指向的具体对象
  2. ALL_VIEWS 用于查找数据库中的视图,并查看其 SQL 逻辑
  3. 同义词主要用于简化访问,而视图用于数据抽象和权限控制
  4. 通过 DBMS_METADATA.GET_DDL 可以获取视图的完整 SQL 逻辑
  5. 维护数据库时,合理使用同义词和视图可以提高 SQL 可读性和安全性

如果想修改 C_CY_AREA 同义词指向的对象,需要先删除,再重新创建:(C_CY_AREA 表名)

DROP SYNONYM C_CY_AREA;
CREATE SYNONYM C_CY_AREA FOR NEW_SCHEMA.NEW_TABLE;

如何检查视图的 SQL 逻辑?
如果视图的 SQL 语句较长,使用 DBMS_METADATA.GET_DDL 可以更清晰地查看:

SELECT DBMS_METADATA.GET_DDL('VIEW', 'C_CY_AREA', 'HR') FROM DUAL;

如何查看某个用户创建的所有视图?

SELECT view_name FROM all_views WHERE owner = 'HR';

如何查看数据库中的所有公有同义词?

SELECT * FROM all_synonyms WHERE owner = 'PUBLIC';
;